2017-09-12 47 views

回答

0

由於希內克-Pichi- Vychodil

ETS(Erlang Term Storage)提供了在表的形式存儲器存儲健壯。任何數據都可以使用鍵值對存儲到表中。
這裏是我的解決方案:

defmodule MyModule do 

    def m1(x) do 

     # Create named table and insert the variable 

     :ets.new(:user_lookup, [:set, :protected, :named_table]) 
     :ets.insert(:user_lookup, {"key", x}) 

     # some code 
    end 

    def m2() do 

     # Accesss 'x' here by using table lookup 
     [{_, x}] = :ets.lookup(:user_lookup, "key") 
     IO.puts x 
    end 
end 
0

沒有違法,但根據你的使用情況,好像你所想的OOP,在花好月圓我們真的沒有「全局變量」的概念,你可以嘗試這樣的事情呢?

defmodule MyModule do 

    def m1(x) do 
     m2(x) # Call m2 with x 
    end 

    def m2(param) do 
     IO.puts param 
    end 
end 
+0

我不想從M1 M2打電話。方法m2將被另一個模塊調用。 –

5

你不能這樣做。正是在BEAM禁止運行,因此它在Erlang和藥劑以及所有其他基於BEAM語言。這是您必須透明地爲每個函數調用提供所有必需的輸入數據的預期行爲。您可以使用Erlang Run-Time System (erts)的其他組件模擬它。例如,你可以使用ets (Erlang Term Storage)或者你可以使用過程中的工作因爲提供這種存儲服務器。這個限制是製造Erlang最主要目的的高度可靠系統的基本構件。有關更多信息,請閱讀Making reliable distributed systems in the presence of software errors論文。它在工作開始時被描述爲最好的。

相關問題