我与一位模式匹配试验在二郎:为什么函数参数中没有动态位模式?
-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是绑定的。