我有一张地图(Ecto.Changeset
的错误):
%{
field_a: ["error 1", "error 2"],
field_b: ["something here"]
}
我希望它成为
[
"field_a error 1",
"field_a error 2",
"field_b something here"
]
我尝试用
实现它Enum.map(map, fn({ key, errors }) ->
# another anonymous function which generates strings
end)
但是自elixir doesn't support nested anonymous functions right now以来出现了编译错误。
如何实现此转换?
答案 0 :(得分:3)
虽然您可以使用Enum.flat_map
,但我相信for
会更清楚:
errors = %{
field_a: ["error 1", "error 2"],
field_b: ["something here"]
}
formatted =
for {field, messages} <- errors,
message <- messages,
do: "#{field} #{message}"
IO.inspect formatted
输出:
["field_a error 1", "field_a error 2", "field_b something here"]
但由于elixir现在不支持嵌套的匿名函数,因此出现了编译错误。
这是匿名递归函数; Elixir支持嵌套的匿名函数。