例如,在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中如何工作的解决方案?
答案 0 :(得分:8)
与erlang中的相同 - 在模式中多次使用变量强制它在所有出现时都具有相同的值。
fn(a, a) -> :same_values_only
引脚运算符允许强制执行变量的先前值。模式匹配不是从左到右计算,而是作为整个表达式进行计算,因此在模式匹配之前不会绑定任何变量。