更新深层嵌套的结构

NoD*_*ame 4 elixir

所以我想说我有以下结构:

%Car{details: [%CarDetail{prices: [%Price{euro: 5}]}]}
Run Code Online (Sandbox Code Playgroud)

我想在汽车细节的价格清单中添加另一个价格结构,我该怎么做?

显然,真正的例子是更深的,所以我不能使用模式匹配,我不能想出一种使用方式put_in/3或类似的东西.

一些帮助将不胜感激.谢谢.

Pat*_*ity 10

您可以使用Kernel.update_in/3遍历嵌套结构.通过简单地传递密钥列表将无法工作update_in,因为结构和列表都不实现访问协议.这是Access.key!/1Access.all进来的.要知道,虽然,那下面的代码段将价格加到所有车的细节,应该有不止一个.如果只需更新特定详细信息,则可以使用Access.at/1实现自己的访问功能.

update_in car, [Access.key!(:details), Access.all, Access.key!(:prices)], fn(prices) ->
  [%Price{euro: 12345} | prices]
end
Run Code Online (Sandbox Code Playgroud)