我想根据其参数在函数(通过调用 bar1
或 bar2
)内进行有条件的函数分配。问题是,它必须为一个参数函数分配bar1
或bar2
。
这是我在做什么的一个例子:
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
的返回类型(因此您可能必须添加函数返回类型的声明),因此这将不是很有效的。您在编辑中的答案是类型稳定的。