Julia 进行条件内部函数赋值
我想根据函数的参数在函数内部进行条件函数赋值(通过调用函数Julia 进行条件内部函数赋值,julia,Julia,我想根据函数的参数在函数内部进行条件函数赋值(通过调用函数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) foo(1.1, fals
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)
foo(1.1, false)
输出
1.8181818181818181
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
召唤
foo(1.1, true)
foo(1.1, false)
输出
1.8181818181818181
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
当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
问题仍然存在,尽管…这在朱莉娅语言中是一个悬而未决的问题(请参阅)。在这种情况下,建议使用匿名函数
function foo(a, b=false)
if b
f = t -> t*a
else
f = t -> t/a
end
return f(2.0)
end
请注意,这将不是非常有效,因为编译器无法推断
foo
的返回类型(因此可能需要添加函数返回类型的声明)。您在编辑中的答案是类型稳定的。这在Julia语言中是一个悬而未决的问题(请参阅)。在这种情况下,建议使用匿名函数
function foo(a, b=false)
if b
f = t -> t*a
else
f = t -> t/a
end
return f(2.0)
end
请注意,这将不是非常有效,因为编译器无法推断
foo
的返回类型(因此可能需要添加函数返回类型的声明)。您在编辑中的答案是类型稳定的。您的函数代码经常依赖于这样的真/假语句,这是一个需要考虑使用参数类型的<代码> @生成/<代码>函数的情况。通常您的函数代码依赖于这样的真/假语句,则需要考虑使用<代码> @生成的< /代码>。函数以参数类型为条件。