2017-03-17 49 views
3

例如,在二郎:什麼是Elixir在函數子句中匹配相同值的方式?

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

顯然我是一個白癡,應該幾個小時前睡覺...謝謝 –

相關問題