在Erlang中匹配地图

qua*_*ato 1 erlang

我怎么能在Erlang中这样匹配?

#{o => 0} = maps:put(o, 0, maps:new()).
"Illegal pattern"
Run Code Online (Sandbox Code Playgroud)

从我在erlang shell中可以读到的内容来看,这些值是等价的.为什么我不匹配?

Pas*_*cal 5

#{o := 0} = maps:put(o, 0, maps:new()).
Run Code Online (Sandbox Code Playgroud)

该符号=>用于创建键值对,该符号:=适用于现有键.所以前面的表达式对模式匹配有效,以下内容对比较有效(比较的两边是等价的):

#{o => 0} == maps:put(o, 0, maps:new()).


1> #{o := 0} = #{o => 0,i => 1}. % will match                
#{i => 1,o => 0}
2> #{o := 0} = #{o => 2,i => 1}.  % will not match
** exception error: no match of right hand side value #{i => 1,o => 2}
3> #{o => 0} == #{o => 0,i => 1}. % is false
false
3>
Run Code Online (Sandbox Code Playgroud)