Julia 文档声明函数是第一类对象。我理解这意味着我应该能够以与普通旧数据类型相同的方式使用和定义它们。
因此我很惊讶
function a(b::Int64)
if b > 0
c = 1
else
c = -1
end
end
a(2)
工作精美,同时
function d(e::Int64)
if e > 0
println("Positive argument")
function f()
println("Return positive")
return e
end
else
println("Negative argument")
function f()
println("Return negative")
return e
end
end
return f
end
使用时有效,但做一些非常违反直觉的事情:
>>> g = d(2)
Positive argument
(::f) (generic function with 1 method)
>>> g()
Return negative
2
或者:
>>> g = d(-2)
Negative argument
ERROR: UnderVarError: f not defined
这可能比返回意想不到的东西更有用,但仍然更令人困惑。
我希望f
会返回来自相应分支的版本。我对 Julia 中的函数定义如何工作的理解哪里出了问题?