在Julia 1.4.1中,如果我在全局作用域中定义了一个函数,那么在 "if false "语句之后的修改不会影响它,正如预期的那样。
test()=0
if false
test()=1
end
println(test())
这将打印 "0",这是应该的。然而,当我将这段代码包含在局部作用域中时,行为发生了变化。
function main()
test()=0
if false
test()=1
end
println(test())
end
main()
现在打印的是 "1",这是我没有想到的。如果我把 "test "改成数组或浮点数,我观察到没有预期的修改,也就是说,问题没有发生。为什么Julia对函数有这样的行为?
解决方法是在这种情况下使用匿名函数。
function main()
test = () -> 0
if false
test = () -> 1
end
println(test())
end
julia> main()
0
至于为什么,这就涉及到了核心的问题了 定义和重新定义一个函数的特定方法意味着什么?.