2017-02-09 75 views
-1

說,我有2個模塊。嵌套模塊和「@variable」訪問

defmodule Mod1 do 
    @var1 123 
end 


defmodule Mod1.Mod2 do 
    def func1 do 
    @var1 * 10 # how ???? 
    end 
end 

有什麼辦法可以訪問@ var1,而無需在Mod1中爲它創建特殊功能?

defmodule Mod1 do 
    @var1 123 

    def var1_getter do # only for Mod2 
    @var1 123   # any other way??? 
    end 
end 
+0

我建議閱讀更多文檔,並在問這裏之前仔細閱讀「Programming Elixir」。 – PatNowak

+0

@PatNowak,aaahhhhhaaaaahhhaa – Torito

回答

3

有什麼辦法來訪問@ VAR1而不必MOD1創建一個特殊的功能呢?

沒有,沒有。模塊屬性只存在於編譯時,如果你想公開它們的值,你需要從公共函數返回它。

另外,Elixir中的嵌套模塊沒有什麼特別之處,除了父模塊的名稱是子級名稱的前綴。編譯完成後,它們是完全獨立的模塊,恰好被命名爲Mod1Mod1.Mod2

+0

值得一提的是['Kernel。@'](https://github.com/elixir-lang/elixir/blob/master/lib/elixir/lib/kernel.ex#L2399)是一個普通的老式宏,基本上是['Module.put_attribute/3'](https://hexdocs.pm/elixir/Module.html#put_attribute/3)的複雜檢查啓用別名。 – mudasobwa

+0

Elixir遠離OOP,因此嵌套模塊不是嵌套類,模塊屬性遠離類字段。 – PatNowak

+0

您可以定義一個宏__USING__並將所有屬性寫入宏,並將它們加載到您的模塊中,像這樣使用module_name – Ankanna