2013-12-18 21 views
0

我知道您可以使用「l(module_name)」在erlang節點中動態加載erlang beam文件。我的問題是,是否有可能以相同的方式或類似的方式加載「.hrl」文件,而無需重新啓動erlang節點動態加載erlang頭文件

回答

2

我不確定這是可能的,但僅基於理解,當您嘗試定義一個在URL中的宏,並且您想要修改它,編譯器會在編譯erlang文件時通過替換標頭中定義的宏來替換宏。

從邏輯上說,您應該重建代碼並再次部署它。我不明白爲什麼你需要動態加載hrl文件的原因,如果你有一個動態替換整個代碼的選項。恕我直言,所有你需要做的是重建和升級,這也可以在不重新啓動erlang節點的情況下完成。

+0

現在好吧,我得到它,所以不是試圖加載直接.hrl文件我應該在修改.hrl後重新編譯erlang文件並加載更新的光束。既然你是專門討論宏,我是否也可以假設這也適用於.hrl文件中定義的「記錄」? –

+2

編譯時包含頭文件,與所有編譯語言一樣(糾正我,如果我錯了),所以構建新的BEAM應該足夠了。是的,這也適用於記錄。請注意,如果您修改頭文件中的記錄定義,則必須重新加載包含該頭文件的所有模塊(並使用該記錄),以免將自己淹沒在不匹配錯誤中。 –

0

「.hrl」文件 - 僅由編譯器在編譯源中使用。它不是運行時文件。

您可以通過年糕團隊用流行的自動reloader https://github.com/mochi/mochiweb/blob/master/src/reloader.erl

把它們放在你的src /文件夾,並添加到您的EXEC ERL 選項

+0

啊謝謝,整個事情現在變得更有意義了,我一直在想,在運行時也需要.hrl文件。 erlang仍然是一個新手 –