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