我與一位模式匹配試驗在二郎:爲什麼函數參數中沒有動態位模式?
-module(test).
-export([test/2]).
%test(P,<<X:P,0:1>>) ->
% X.
test(P,X) ->
<<Y:P,0:1>> = X,
Y.
編譯test/2
註釋掉版本時,我收到一宗投訴,「變量‘P’是綁定」。 有沒有任何理由不允許第一個版本與第二個版本一樣工作?
我與一位模式匹配試驗在二郎:爲什麼函數參數中沒有動態位模式?
-module(test).
-export([test/2]).
%test(P,<<X:P,0:1>>) ->
% X.
test(P,X) ->
<<Y:P,0:1>> = X,
Y.
編譯test/2
註釋掉版本時,我收到一宗投訴,「變量‘P’是綁定」。 有沒有任何理由不允許第一個版本與第二個版本一樣工作?
因爲在註釋掉版本P是一個長度 - 爲它工作二郎需要執行兩個賽 - 匹配是不確定的模式的第二個參數的值...
問題你問中的條文模式匹配是「這是我的條款」 - 你不能「隨便走進條款」,然後再出來,如果它不是...
在第二個例子中X爲在比賽結束前,你承諾要進入該條款,如果碰撞時間太快!
的原因是,函數的自變量進行評估相互獨立的。第二步檢查綁定變量的正確性。
這意味着,在第一個實施例P將評估第二參數,它是對模式匹配的規則時是未結合的。相比之下,在第二個例子中,在評估二進制模式匹配時,P是綁定的。