所以在我的凤凰应用程序中,我有这个警告:
警告:不推荐使用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投射到地图上?
答案 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}