Erlang-为什么这两个表达式不匹配?
我有这样一个案例陈述:Erlang-为什么这两个表达式不匹配?,erlang,Erlang,我有这样一个案例陈述: case {[{atom1,A1},{atom2,A2}],false} of {[{A,B},{C,D}], false} -> {A,B} end. 还有其他案例,但我把它们删掉了 我不明白为什么会出现以下错误: **异常错误:没有匹配{[{atom1,A1},{atom2,A2}],false}的case子句 在函数表达式中:myFunct/1 myModule.erl,第391行 为什么{[{ato
case {[{atom1,A1},{atom2,A2}],false} of
{[{A,B},{C,D}], false} -> {A,B}
end.
还有其他案例,但我把它们删掉了
我不明白为什么会出现以下错误:
**异常错误:没有匹配{[{atom1,A1},{atom2,A2}],false}的case子句
在函数表达式中:myFunct/1 myModule.erl,第391行
为什么{[{atom1,A1},{atom2,A2},{false}不等于{[{A,B},{C,D},{false}?它是相等的。除非变量A或C已经绑定到某个值。它是相等的。除非变量A或C已经绑定到某个值。它确实绑定到某个值。如果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}
是的。如果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}
当case子句模式匹配时,可能A、B、C、D中的任何一个或所有这些都已绑定到某个值,这与匹配所需的值不同
要使其匹配,必须在模式匹配发生时满足以下条件:
A必须是未绑定的,否则它必须包含值atom1
B必须是未绑定的,否则它必须包含与A1相同的值
C必须是未绑定的,否则它必须包含值atom2
D必须是未绑定的,否则它必须包含与A2相同的值
当case子句模式匹配时,可能A、B、C、D中的任何一个或所有这些都已绑定到某个值,这与匹配所需的值不同
要使其匹配,必须在模式匹配发生时满足以下条件:
A必须是未绑定的,否则它必须包含值atom1
B必须是未绑定的,否则它必须包含与A1相同的值
C必须是未绑定的,否则它必须包含值atom2
D必须是未绑定的,否则它必须包含与A2相同的值