我正在尝试在Armstrong的Erlang书籍的交互式shell上执行示例代码。这就是本书所说的情况:
1> Henry8 = #{ class => king, born => 1491, died => 1547 }. #{ born =>
1491, class=> king, died => 1547 }.
2> #{ born => B } = Henry8.
#{ born => 1491, class=> king, died => 1547 }.
然而,这是我在shell上得到的,似乎模式匹配失败了:
1> Henry8 = #{ class => king, born => 1491, died => 1547 }.
#{born => 1491,class => king,died => 1547}
2> #{ born => B } = Henry8.
* 1: illegal pattern
答案 0 :(得分:3)
=>
用于构建地图。要对地图进行模式匹配,您需要改为使用:=
。
1> Henry8 = #{ class => king, born => 1491, died => 1547 }.
#{born => 1491,class => king,died => 1547}
2> #{ born := B } = Henry8.
#{born => 1491,class => king,died => 1547}
3> B.
1491
这将在"模式中的地图" here
答案 1 :(得分:0)
代码示例前面是文本:
模式匹配地图的字段
我们在地图文字中使用的:=
语法也可以用作地图模式。
在构建地图之前,该文字前面有一整段解释=>
和:=
之间的差异,因此您应该已经了解了两种不同的语法。
在书中,该例子的第2行说:
2> #{born := B} = Henry8.
但是在你输入的shell中:
2> #{ born => B } = Henry8.
我建议您稍微仔细阅读section 5.3
,并阅读pertinent section of LYSE,其中包含此示例:
1> Pets = #{"dog" => "winston", "fish" => "mrs.blub"}. #{"dog" => "winston","fish" => "mrs.blub"} 2> #{"fish" := CatName, "dog" := DogName} = Pets. #{"dog" => "winston","fish" => "mrs.blub"} 7> CatName. "mrs.blub" 8> DogName. "winston"
在这里可以抓取任何数量的项目的内容 时间,无论按键顺序如何。您会注意到元素已设置 使用
=>
并与:=
匹配。:=
运算符也可用于更新地图中的现有密钥