假设我map有一些用户数据:
iex(1)> user_map
#=> %{name: "Some User", email: "user@example.com", password: "*********"}
Run Code Online (Sandbox Code Playgroud)
如何将其加载到%User{}结构中(希望使用一些Rubyish Elixir Magic)?
我目前试过这些但是所有这些都失败了.浏览Elixir网站上的Structs部分.
user_struct = %{ %User{} | user_map }
user_struct = %{ %User{} | Enum.to_list(user_map) }
Run Code Online (Sandbox Code Playgroud)
She*_*yar 11
在elixir-lang-talk邮件列表上找到答案.我们可以使用这个struct/2方法:
struct(User, user_map)
#=> %User{name: "Some User", email: "user@example.com", password: "*********"}
Run Code Online (Sandbox Code Playgroud)
Dogbert提到的另一种方法是使用Map.merge/2:
Map.merge(%User{}, user_map)
#=> %User{name: "Some User", email: "user@example.com", password: "*********"}
Run Code Online (Sandbox Code Playgroud)
请注意:Map.merge无法处理结构上的强制键