给定一张地图,可以编写如下内容:
mymap
|> put_in([:foo, :bar], "hello")
|> put_in([:attr1], "how are you")
|> put_in([:attr2], "goodbye")
理想情况下,我能够对结构做同样的事情:
mystruct
|> put_in(.foo.bar, "hello")
|> put_in(.attr1, "how are you")
|> put_in(.attr2, "goodbye")
这样的事情可能吗?目前我写的是:
mystruct = put_in(mystruct.foo.bar, "hello")
mystruct = put_in(mystruct.attr1, "how are you")
put_in(mystruct.attr, "goodbye")
它完成了工作,但并不像使用管道操作员那样优雅。
答案 0 :(得分:4)
实际上,您可以对结构使用put_in
。这就是你想要的,对于后来遇到这个问题的人来说:
mymap
|> put_in([:foo, :bar] |> Enum.map(&Access.key/1), "hello")
|> put_in([Access.key(:attr1)], "how are you")
|> put_in([Access.key(:attr2)], "goodbye")
答案 1 :(得分:-1)
你可以使用捕获
hidden_field_tag
应该有用。
编辑:仅适用于地图。 mymap
|> put_in([:foo, :bar], "hello")
|> put_in([:attr1], "how are you")
|> put_in([:attr2], "goodbye")
不适用于结构,因为它们不会实现put_in
协议。