从Elixir中的Map将值加​​载到Struct中

She*_*yar 5 elixir

假设我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无法处理结构上的强制键

  • 我认为应该首选第一种方法,Map.merge无法处理强制密钥. (3认同)