【发布时间】:2021-04-02 13:25:03
【问题描述】:
我有一个以 Map %{} 为参数的函数
def set_data (data) do
...
end
我正在尝试使用map.put 更新参数data。
data是这样的平面地图
%{
a: ...
b: ...
c: ...
}
我遇到的问题是在 data 映射中设置一个键/属性,另一个映射如下所示:
ModuleA.EctoSchemaMap{
some_key: nil,
another_key: ModuleB.EctoSchemaMap{
inner_key_a: "456",
inner_key_b: nil
}
}
ModuleA.EctoSchemaMap 上面的这个映射是从这样的函数调用返回的
some_data = get_data()
所以some_data = ModuleA.EctoSchemaMap 上面的地图。
由于某种原因,当我尝试更新函数中参数 data 映射中的键 b 时,所有内容都将复制 ModuleA.EctoSchemaMap 映射中的 nil 值,但键 @ 987654338@ 也显示为 nil,即使在 some_data 显示之前 inner_key_a 不是 nil
data
|> map.put(:a, "123")
|> map.put(:b, some_data)
在完成上述管道之后,我期待 data 更新 :b 的值
b: ModuleA.EctoSchemaMap{
some_key: nil,
another_key: ModuleB.EctoSchemaMap{
inner_key_a: "456", //I need this value to be there
inner_key_b: nil
}
}
但它却显示了这个
b: ModuleA.EctoSchemaMap{
some_key: nil,
another_key: ModuleB.EctoSchemaMap{
inner_key_a: nil, //NOT sure why this is being set as nil even though `some_data` had a value for this
inner_key_b: nil
}
}
【问题讨论】:
-
你确定是
map而不是Map? -
如何知道它正在更新键
:a_key的原始映射?请添加更新原地图的校验码。 -
它是一个
Map,就像%{} -
您能否展示一个完整的代码示例?如果您能够准确地向我们展示您正在运行的内容以及您期望它返回的内容,它将帮助您获得更好的响应。
-
@hnhl - 请包含工作代码 sn-p。您包含了多个不添加到完整可执行脚本的部分。很难判断问题可能是什么 - 它可能与 Ecto 有关,或者与不变性有关。如果由于某种原因无法发布实际代码,请尝试创建stackoverflow.com/help/minimal-reproducible-example。
标签: elixir