我不明白为什么会发生/为什么我在执行 somefunc() = 100
时没有收到错误消息?现在当我“打电话”somefunc
, 它输出 100
.我也试过做somefunc = 100
,然后给我一个错误。重新分配后somefunc()
至100
, 当我写 somefunc
,它仍然说它是一个函数。
这里到底发生了什么?为什么重新分配 somefunc
时出现错误为一个值,但在重新分配 somefunc()
时, 不是?为什么somefunc
仍然说它是一个功能,即使在重新分配它之后?
最佳答案
当你写 somefunc() = 100
在全局范围内,您为 somefunc
定义了一个新方法。功能。这有两个效果:
somefunc
未定义,使其成为绑定(bind)到新泛型函数的常量(即不能像 const x = 123
那样重新分配)。 () -> 100
到somefunc
通用函数对象。 事实上,
somefunc
的绑定(bind)是恒定的,这就是为什么你不能在之后重新分配它。这对性能非常重要,因为非常量全局变量的性能很差;如果函数绑定(bind)不是恒定的,那么任何时候调用函数都会很慢。即使你不能改变什么功能
somefunc
指的是,您可以通过向其添加方法甚至覆盖现有方法来更改函数本身。比如以后写somefunc() = 200
不会创建新函数,而是用返回 200 而不是 100 的新方法替换不带参数的函数的方法。当你写:
somefunc() = 100
它只是一个简写
function somefunc()
return 100
end
所以即使有
=
符号,这是一个赋值运算符,它与写 x = 100
不同。 ,它只是绑定(bind)值 100
姓名 x
.特别注意写作例如:somefunc = () -> 100
允许你写
somefunc()
, 并得到 100
.不过这次你以后有空写somefunc = 100
,如 somefunc = () -> 100
不是函数定义,而是绑定(bind)匿名函数 () -> 100
的 na 赋值。名somefunc
.
关于julia - 将函数重新分配给值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61839966/