Elixir在函数子句中匹配相同值的方法是什么?

时间:2017-03-17 05:49:19

标签: elixir

例如,在Erlang中:

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

我天真地尝试了Elixir中的插入符,但这是不行的:

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中如何工作的解决方案?

1 个答案:

答案 0 :(得分:8)

与erlang中的相同 - 在模式中多次使用变量强制它在所有出现时都具有相同的值。

fn(a, a) -> :same_values_only

引脚运算符允许强制执行变量的先前值。模式匹配不是从左到右计算,而是作为整个表达式进行计算,因此在模式匹配之前不会绑定任何变量。