Elixir 什么是在函数子句中匹配相同值的长生不老药?
例如,在Erlang中:Elixir 什么是在函数子句中匹配相同值的长生不老药?,elixir,Elixir,例如,在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,
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中的工作原理?它与Erlang中的工作原理相同-在模式中多次使用变量会强制它在所有情况下都具有相同的值
fn(a, a) -> :same_values_only
pin运算符允许强制执行变量的上一个值。模式匹配不是从左到右求值,而是作为一个整体表达式求值,因此在模式匹配之前不会绑定任何变量。显然,我是个白痴,几个小时前就该睡觉了。。。谢谢