gpt4 book ai didi

elixir - 如何在不存在的路径上更新嵌套 map

转载 作者:行者123 更新时间:2023-12-05 01:43:11 24 4
gpt4 key购买 nike

Elixir 中有用于更新嵌套数据结构的内核函数,Kernel.put_in/3 和 Kernel.update_in/3,这有助于使用路径和值或函数更新 Elixir 的不可变数据结构,在后一种情况下.

这是 update_in 文档中的示例:

users = %{"john" => %{age: 27}, "meg" => %{age: 23}}
update_in(users, ["john", :age], &(&1 + 1))
%{"john" => %{age: 28}, "meg" => %{age: 23}}

这需要如何更改以支持将值放置在数据结构中不存在的路径中?

如果使用未知的第一个路径元素,就会发生这种情况:

put_in(users, ["clara", :age], 29)
** (ArgumentError) could not put/update key :age on a nil value
(elixir) lib/access.ex:379: Access.get_and_update/3
(elixir) lib/map.ex:773: Map.get_and_update/3
(elixir) lib/kernel.ex:2057: Kernel.put_in/3

期望的结果是这样的:

%{"john" => %{age: 27}, "meg" => %{age: 23}, "clara" => %{age: 29}}

最佳答案

如果特定键不存在,您可以使用 Access.key/2 指定默认值。在这种情况下,您需要将键 "clara" 的值默认为 %{}:

iex(1)> users = %{"john" => %{age: 27}, "meg" => %{age: 23}}
iex(2)> put_in(users, [Access.key("clara", %{}), :age], 29)
%{"clara" => %{age: 29}, "john" => %{age: 27}, "meg" => %{age: 23}}

关于elixir - 如何在不存在的路径上更新嵌套 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50177428/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com