我有这个案例陈述:
case {[{atom1,A1},{atom2,A2}],false} of
{[{A,B},{C,D}], false} -> {A,B}
end.
还有其他情况,但我将它们删除了。
我不明白为什么会收到以下错误:
**异常错误:没有匹配{[{atom1,A1},{atom2,A2}],false}的case子句 在函数expr中:myFunct / 1(myModule.erl,第391行)
为什么{[{atom1,A1},{atom2,A2}],false}不等于{[{A,B},{C,D}],false}?
答案 0 :(得分:2)
当A
子句时,B
,C
,D
,case
(或所有这些)之一可能已绑定到某个值模式匹配,与匹配时不一样。
为了匹配,必须满足以下条件,在模式匹配发生时:
A
必须是未绑定的,否则必须包含值atom1
B
必须是未绑定的,否则它必须包含与A1
相同的值C
必须是未绑定的,否则必须包含值atom2
D
必须是未绑定的,否则它必须包含与A2
相同的值答案 1 :(得分:1)
它是平等的。除非变量A或C已经绑定到某个值。
答案 2 :(得分:1)
确实如此。如果A
,B
,C
或D
中至少有一个已经绑定了与之不匹配的值,则问题可能是您的周围代码。
$ erl
Erlang R16B03-1 (erts-5.10.4) [source] [64-bit] [smp:4:4] [async-threads:10] [hipe] [kernel-poll:false]
Eshell V5.10.4 (abort with ^G)
1> A1 = foo, A2 = bar.
bar
2> case {[{atom1,A1},{atom2,A2}],false} of
2>
2> {[{A,B},{C,D}], false} -> {A,B}
2> end.
{atom1,foo}