我想根据其参数在函数内部进行条件功能分配(通过调用函数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:\Users\pedro\Documents\codigos\Julia_HEM\compara_hem_neumann.jl:89
[2] top-level scope at none:0
为什么在f
时未定义b=false
?
一种解决方法是为每种条件定义不同的功能。例如
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
问题仍然存在,
答案 0 :(得分:0)
这是Julia语言的未解决问题(请参见https://github.com/JuliaLang/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
的返回类型(因此,您可能必须添加函数返回类型的声明),这样做的效率不是很高。您在EDIT中的答案是类型稳定的。