2017-03-17 1 views
3

:私は単純にエリクサーでキャレットを試みたが、それは、外出先ではなかった関数節で同じ値を一致させるエリクシールの方法は何ですか?例えば、Erlangで

1> (fun(A,A) -> same_values_only end)(7,7) 
same_values_only 

:もちろん

iex(3)> (fn(a,^a) -> :same_values_only end).(7,7)   
** (CompileError) iex:3: unbound variable ^a 

明白な解決策の作品

iex(2)> (fn(a,a) when a == a -> :same_values_only end).(7,9) 
** (FunctionClauseError) no function clause matching in :erl_eval."-inside-an-interpreted-fun-"/2 

iex(2)> (fn(a,a) when a == a -> :same_values_only end).(7,7) 
:same_values_only 

が、 Erlangで一番上手に動作する方法に近いソリューションがあるかどうか疑問に思っていましたか?

答えて

8

これはerlangと同じです。パターン内で変数を複数回使用すると、すべての出現で同じ値が強制されます。

fn(a, a) -> :same_values_only 

pin演算子を使用すると、変数の前の値を強制することができます。パターンマッチは左から右に評価されるのではなく、式全体として評価されるため、パターンが一致するまで変数はバインドされません。

+1

明らかに私はばかです、そして、前に寝ていたはずです...ありがとう –

関連する問題