繁体   English   中英

药剂地图值未更新

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM