[英]Elixir map value not updating
我在Elixir中编写了一个函数,该函数创建了一个地图,然后尝试更改其键之一的值,但它似乎不想更新。
defmodule KV do
def test() do
map = %{foo: "bar", hello: "world"}
IO.inspect map.foo
%{map | foo: "baz"}
IO.inspect map.foo
end
end
KV.test()
我希望在编译代码后会出现以下内容:
"bar"
"baz"
但是我实际上得到的是:
"bar"
"bar"
但是,当我尝试仅在iex shell上键入它时,它会执行应做的事情:
iex(1)> map = %{foo: "bar", hello: "world"}
%{foo: "bar", hello: "world"}
iex(2)> %{map | foo: "baz"}
%{foo: "baz", hello: "world"}
我尝试了许多其他方法来更新值,但似乎没有任何效果。
药剂地图是不可变的。 %{map | foo: "baz"}
%{map | foo: "baz"}
使用更新后的值创建一个新地图,但是如果要使用map.foo
访问新值,则需要将新地图分配给map
:
map = %{foo: "bar", hello: "world"}
IO.inspect map.foo
map = %{map | foo: "baz"}
IO.inspect map.foo
如果您尝试在第二行输入之后打印map.foo
,则REPL中的行为完全相同:
iex(1)> map = %{foo: "bar", hello: "world"}
%{foo: "bar", hello: "world"}
iex(2)> map.foo
"bar"
iex(3)> %{map | foo: "baz"}
%{foo: "baz", hello: "world"}
iex(4)> map.foo
"bar"
iex(5)> map = %{map | foo: "baz"}
%{foo: "baz", hello: "world"}
iex(6)> map.foo
"baz"
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.