下面基本上是从JA的书抄代码:地图模式匹配,异常错误(绑定)
-module(mapz).
-export([count_chars/1]).
count_chars(Str) ->
count_chars(Str, #{}).
count_chars([H|T], #{H := N}=X) -> % line that throws
count_chars(T, X#{H := N+1});
count_chars([H|T], X) ->
count_chars(T, X#{H => 1});
count_chars([], X) -> X.
然而
,在shell编译它给了我
151> c(mapz).
mapz.erl:7: variable 'H' is unbound
error
152>
我理解在将H用于映射地图中的键之前绑定H的重要性;并且,据我所知,它正在匹配到第一个参数中的列表(字符串)的头部,并因此被第二个参数(与地图匹配)的评估时间所约束。更重要的是,这本书的例子,我怀疑它是正确的。这本书似乎在使用OTP17,然而,我现在已经20岁了,不知道事情是否改变了?但是,哪些东西?
谢谢你的时间。
https://stackoverflow.com/questions/23106543/illegal-pattern-in-map-of-erlang – Dogbert
ha!感谢队友,奇怪为什么SO没有给我提出这个问题/答案。 – alexakarpov
有趣的 - 在那里,他使用“count_characters([H | T],#{H => N} = X) - > ...” - 操作'=>',而本书和我的示例使用' :=”。 – alexakarpov