julia - 将函数重新分配给值
问题描述
我不明白为什么会发生/为什么我在做的时候没有出错somefunc() = 100
?现在,当我“调用”时somefunc
,它会输出100
. 我也试过做somefunc = 100
,然后给我一个错误。重新分配somefunc()
给后100
,当我刚写的时候somefunc
,它仍然说它是一个函数。
这里到底发生了什么?为什么我在重新分配somefunc
一个值时会出错,但在重新分配时却somefunc()
没有?为什么somefunc
即使在重新分配它之后仍然说它是一个函数?
解决方案
当您somefunc() = 100
在全局范围内编写时,您为该somefunc
函数定义了一个新方法。这有两个效果:
- 如果未定义,则使其成为绑定到新泛型函数
somefunc
的常量(即不能像 一样重新分配)。const x = 123
- 无论是否为通用函数对象添加
() -> 100
方法somefunc
。
绑定为常量的事实somefunc
是您事后无法重新分配它的原因。这对性能非常重要,因为非常量全局变量的性能很差;如果函数绑定不是恒定的,那么任何时候调用函数都会很慢。
即使您无法更改函数所somefunc
引用的内容,您也可以通过向其添加方法甚至覆盖现有方法来更改函数本身。例如,稍后编写somefunc() = 200
不会创建新函数,而是用返回 200 而不是 100 的新方法替换不带参数的函数的方法。
当你写:
somefunc() = 100
它只是一个简写
function somefunc()
return 100
end
因此,即使有一个=
符号,它是一个赋值运算符,它与 write 不同x = 100
,它只是将值绑定100
到 name x
。特别注意写作例如:
somefunc = () -> 100
让你写somefunc()
,得到100
。但是这次您可以稍后再编写somefunc = 100
,因为somefunc = () -> 100
它不是函数定义,而是将匿名函数绑定() -> 100
到名称的 na 赋值somefunc
。
推荐阅读
- java - 创建了一个类来打印一组通用对象,但我没有得到任何输出?
- python-3.x - PermissionError: [WinError 32] 该进程无法访问该文件,因为在尝试重命名文件时它正被另一个进程使用
- flutter - Flutter MaterialPageRoute 在发布模式下不起作用
- css - React styled-components 共享样式
- java - 如何通过 Java 查找当前活动的网络接口的名称?
- highcharts - 如何在 Highcharts 上设置多个轴上的单位
- javascript - NodeJS:表格元素的 Href
- python - Python:从 arg 解析器到字典
- django - 嵌套序列化程序的 Yasg 模式生成显示不正确的请求/响应
- vue.js - Vue SSR 子级别路由