我在靈藥使用IEX在上面的代碼x * 2
從MeteorJS測試一些代碼移植到靈藥(鳳凰)我怎樣才能做一個函數內的多個全局變量編輯?
iex> x = 1
1
iex> (fn -> x * 2 end).()
2
iex> x
1
&新只有內部功能的影響,其實我要的是編輯(內部功能)外該函數執行
後,我期待x = 1
最初和X = 2是函數執行
我怎樣才能做到像仙丹的函數內的多個全局變量編輯後?
我在靈藥使用IEX在上面的代碼x * 2
從MeteorJS測試一些代碼移植到靈藥(鳳凰)我怎樣才能做一個函數內的多個全局變量編輯?
iex> x = 1
1
iex> (fn -> x * 2 end).()
2
iex> x
1
&新只有內部功能的影響,其實我要的是編輯(內部功能)外該函數執行
後,我期待x = 1
最初和X = 2是函數執行
我怎樣才能做到像仙丹的函數內的多個全局變量編輯後?
你不能改變函數內的變量的值。您可以將您的變量函數
x = (fn -> x * 2 end).()
的返回值來獲得多個變量,你可以返回一個元組或列表
{x,y} = (fn -> {x * 2, y * 4} end).()
這是由於在劃定範圍仙丹的工作方式。您可以考慮在自己的環境中運行的函數,其中包含變量。
當你聲明變量x=1
它被稱爲「全局控制檯」環境。當您定義該功能時,該功能可使用變量x
。但是你必須記住,這個函數在自己的環境中執行。對變量所做的任何更改僅在此函數的環境中有效,因此您看不到「全局控制檯」環境中的更改。 如果你喜歡,你可以存儲執行此功能的結果如上所示
它的概念稱爲不變性,靈藥和許多功能類似的語言遵循。通過不可變,Elixir代碼更容易推理,因爲如果某個特定的代碼正在改變您的數據結構,您永遠不需要擔心。
通過不可變,Elixir還有助於消除併發代碼具有競爭條件的常見情況,因爲兩個不同的實體試圖同時更改數據結構。
這是一個範圍問題,我已在Fill a List with a for-loop中解釋過。在入門指南中有具體提及http://elixir-lang.org/getting-started/basic-types.html#anonymous-functions
您需要將該值重新綁定到該函數的結果。這是因爲函數在自己的範圍內運行。
iex> x = 1
1
iex> x = (fn -> x * 2 end).()
2
iex> x
2
您不是全局編輯變量。你正在重新認識一個新的價值。重新綁定前對x的所有引用仍將引用舊值(1)。
@lintocheeran恐怕我不明白你的問題。請你能更詳細些嗎? – Gazler