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