从 Elixir 中的映射将值加载到结构中

Load values into a Struct from a Map in Elixir

假设我有一个 map 和一些用户数据:

iex(1)> user_map
#=> %{name: "Some User", email: "user@example.com", password: "*********"}

如何将其加载到 %User{} 结构中(希望使用一些 Rubyish Elixir Magic)?


我目前已经尝试过这些,但都失败了。浏览 Elixir 网站上的 Structs 部分。

user_struct = %{ %User{} | user_map }
user_struct = %{ %User{} | Enum.to_list(user_map) }

elixir-lang-talk mailing list. We can use the struct/2方法上找到答案:

struct(User, user_map)
#=> %User{name: "Some User", email: "user@example.com", password: "*********"}

另一种方式,如Dogbert, is to use Map.merge/2所述:

Map.merge(%User{}, user_map)
#=> %User{name: "Some User", email: "user@example.com", password: "*********"}

来自评论的警告:Map.merge 无法处理结构上的强制键