簡體   English   中英

重新加載Elixir模塊時會發生什么?

[英]What happens when we reload Elixir modules?

我正在將規范信息添加到我的Elixir庫中,但是我注意到當我在另一個IEx會話中重新加載該庫時,它沒有接收到我要添加的“ @spec”更改。 我的問題是,當我們這樣做時

r(Module) 

在IEx中究竟要重新加載什么?

很好的問題!

當我們在IEx中重新加載模塊時,我們將重新編譯模塊源代碼,並將其內容重新加載到內存中。 磁盤中的原始.beam文件(可能是該模塊的第一個定義所來自的文件)根本沒有改變。

由於typespecs和docs是從.beam文件加載的(它們沒有隨模塊一起加載到內存中,因為它們不需要在內存中),因此在重新加載模塊時它們不會更新,因為磁盤中的內容仍然存在相同。

PS:我大部分回答了r / 1函數的工作方式以及為什么看到這種行為。 如果有興趣,您可以在Erlang中進一步了解有關熱代碼交換的更多信息,該內容也適用於Elixir: http : //learnyousomeerlang.com/designing-a-concurrent-application#hot-code-loving

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM