2016-12-07 8 views
9

エリクシルの変数割り当てに関する質問があります。 Erlangで、これはno match of right hand side valueを引き上げる:エリクシールの変数割り当て

X = 4. 
X = 2. 

をしかし、一回以上の変数に値を代入するエリクサーで完全に罰金です。私は、パターンマッチングがエリクサーでどのように機能するのか混乱しています。 Elixirはどのようにパターンマッチングと変数割り当てを区別しますか?私が理解しているところでは、ErlangではXはバインドされていない変数なので、何かと一致させることができます。しかし、束縛されると、パターンマッチングは、Xと同じ値でなければ動作しません。したがって、ElixirはErlangと同じ概念の非結合変数を共有していませんか?

答えて

12

はい、エリクサーはこの点に関してアーランと同じ概念に従いません。 Elixirは、特にRuby開発者にとって、関数型プログラミングに精通していない開発者にとってより使いやすいものにしようとしています。あなたは、変数固定する必要がありPattern matchingドキュメントによると:また

iex(1)> x=4 
4 
iex(2)> ^x=2 
** (MatchError) no match of right hand side value: 2 

、変数はエリクサーが低い場合に開始する必要があることに注意してください。

+3

http://blog.plataformatec.com.br/2016/01/comparing-elixir-and-erlang-variables/の記事は、この現象の背後にある理由についての素晴らしい説明です。 – michalmuskala