如何Dict将地图和列表与Map合并? (Dict已弃用)

时间:2017-09-22 21:01:36

标签: elixir phoenix-framework

所以在我的凤凰应用程序中,我有这个警告:

  

警告:不推荐使用Dict.merge / 2,使用Map模块进行工作   使用地图或关键字模块处理关键字列表
  测试/支持/ test_helpers.ex:6

ValidateColumn

当我将其更改为bool ValidateColumn(string columnName) { switch columnName.ToUpper() { case "COLUMNA": case "COLUMNB": case "COLUMNC": return true; default: return false; } } 时,它会崩溃,因为attrs不是地图而且它需要地图:

changes = Dict.merge(%{
  name: "Some User",
  username: "user#{Base.encode16(:crypto.strong_rand_bytes(8))}",
  password: "supersecret",
}, attrs)

还有其他方法可以使它工作吗?或者我是否必须将attrs投射到地图上?

1 个答案:

答案 0 :(得分:4)

您可以使用Enum.into/2合并两个Enumerables。如果您想要一个关键字列表作为结果,关键字列表应该是第二个参数,如果您想要一个Map作为结果,Map应该是第二个参数。我猜你想要一张地图,这意味着你可以这样做:

changes = Enum.into(attrs, %{
  name: "Some User",
  username: "user#{Base.encode16(:crypto.strong_rand_bytes(8))}",
  password: "supersecret",
})
iex(1)> Enum.into(%{a: 1}, [b: 2])
[b: 2, a: 1]
iex(2)> Enum.into([b: 2], %{a: 1})
%{a: 1, b: 2}