进行有条件的内部功能分配



我想根据其参数在函数(通过调用 bar1bar2)内进行有条件的函数分配。问题是,它必须为一个参数函数分配bar1bar2

这是我在做什么的一个例子:

function foo(a, b=false)
    if b
        f(t) = t*a; #bar1(t,a)
    else
        f(t) = t/a; #bar2(t,a)
    end
    return f(2.0);
end

呼叫

foo(1.1, true)

输出

1.8181818181818181

呼叫

foo(1.1, false)

输出

ERROR: UndefVarError: f not defined
Stacktrace:
 [1] foo(::Float64, ::Bool) at C:UserspedroDocumentscodigosJulia_HEMcompara_hem_neumann.jl:89
 [2] top-level scope at none:0

为什么在b=false时未定义f

编辑

解决方法是针对每个条件定义一个不同的功能。例如

function foo(a, b=false)
    if b
        f(t) = t*a; #bar1(t,a)
        return f(2.0);
    else
        g(t) = t/a; #bar2(t,a)
        return g(2.0);
    end
end

问题仍然存在...

这是朱莉娅语言中的一个开放问题(请参阅https://github.com/julialang/julia/julia/issues/15602)。建议在这种情况下使用匿名功能。

function foo(a, b=false)
    if b
        f = t -> t*a
    else
        f = t -> t/a
    end
    return f(2.0)
end

请注意,由于编译器无法推断foo的返回类型(因此您可能必须添加函数返回类型的声明),因此这将不是很有效的。您在编辑中的答案是类型稳定的。

最新更新