Elixir在Kernel
中提供了一堆帮助函数,使您可以从嵌套的Map
或实现Access
的另一个结构中获取和更新值:
但是我找不到任何可以帮助我删除值的东西。我知道我可以将值更新为nil
(或者只是通过获取嵌套映射来保持惰性) ,删除值并放入整个地图),但我希望有一个简单的班轮,实际上可以删除我可能错过的值。
答案 0 :(得分:3)
稍作搜索后,我决定将其作为功能请求发布到官方的长生不老药邮件列表中,只是发现它has already been requested,以及确实存在。 Kernel.pop_in/2
,它在元组中返回删除的值和更新的地图:
pop_in(%{user: %{name: "John", age: 27}, [:user, :age])
# => {27, %{user: %{name: "John"}}
何塞没有单独的delete_in/2
方法的原因:
之所以选择
pop_in/2
是因为它自己提供了比delete_in
更多的功能,并且我们希望避免过多的功能使Kernel过载。如果您关注的是连锁,则弹出后始终可以执行a |> elem(1)
。