карты: положить (ключ, значение, карта) не работает в эрланге - PullRequest
2 голосов
/ 28 февраля 2020

maps:put(key,value,Map) не работает

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

вывод #

{"a" => 1}

Почему я не могу получить вывод # {"a" => 42,"b" => 1337}?

1 Ответ

4 голосов
/ 28 февраля 2020

Функция 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}

Как видите, Map сохраняет свое начальное значение.

Чтобы устранить проблему, вам нужно записать возвращаемое значение maps:put/3 в новую переменную:

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

Теперь переменная Map2 имеет искомое значение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...