2
我将规范信息添加到我的Elixir库中,但我注意到当我在另一个IEx会话中重新加载库时,它没有选择我添加的“@spec”更改。我的问题是,当我们做当我们重新加载Elixir模块时会发生什么?
r(Module)
在IEx什么是重新加载?
我将规范信息添加到我的Elixir库中,但我注意到当我在另一个IEx会话中重新加载库时,它没有选择我添加的“@spec”更改。我的问题是,当我们做当我们重新加载Elixir模块时会发生什么?
r(Module)
在IEx什么是重新加载?
非常好的问题!
当我们在IEx中重新加载模块时,我们重新编译模块源代码,将其内容重新加载到内存中。磁盘中的原始.beam文件(可能是模块的第一个定义来自该文件的文件)完全不会改变。
由于typespecs和docs是从.beam文件加载的(它们没有在模块中加载到内存中,因为它们不需要在内存中),所以在重新加载模块时它们不会更新,因为内容在磁盘上仍然是一样的。 PS:我主要回答了r/1函数是如何工作的以及为什么你会看到这种行为。如果有兴趣,你可以阅读更多关于Erlang的热码交换,这也适用于Elixir:http://learnyousomeerlang.com/designing-a-concurrent-application#hot-code-loving