地图:put(键,值,地图)在erlang中不起作用

Sam*_*hah 2 erlang

maps:put(key,value,Map)不工作

Map = #{"a" => 1},
maps:put("a", 42, Map),
maps:put("b", 1337, Map),
io:fwrite("~p~n",[Map]).
Run Code Online (Sandbox Code Playgroud)

输出 #

{"a" => 1}
Run Code Online (Sandbox Code Playgroud)

为什么我无法获得输出# {"a" => 42,"b" => 1337}

Ste*_*ski 5

maps:put/3函数返回一个新地图。Map您可以看到,如果您在第一次调用后再次查看该变量,它不会改变maps:put/3

1> Map = #{"a" => 1}.
#{"a" => 1}.
2> maps:put("a", 42, Map).
#{"a" => 42}
3> Map.
#{"a" => 1}
Run Code Online (Sandbox Code Playgroud)

如您所见,Map保留其初始值。

要解决该问题,您需要将maps:put/3返回值捕获到一个新变量中:

4> Map1 = maps:put("a", 42, Map).
#{"a" => 42}
5> Map2 = maps:put("b", 1337, Map1).
#{"a" => 42,"b" => 1337}
Run Code Online (Sandbox Code Playgroud)

现在该变量Map2具有您正在寻找的值。