【发布时间】:2018-10-15 02:08:57
【问题描述】:
我有这个函数可以将字符串拆分成多个部分,我需要将这些部分放入params 映射中的正确列表中。
parts = String.split(term_string, " ")
params = %{
search_terms: [],
wildcard_terms: [],
minus_terms: [],
room_terms: [],
messages_to_terms: [],
messages_from_terms: [],
date_before_terms: [],
date_after_terms: [],
date_on_terms: [],
date_during_terms: []
}
Enum.reduce(parts, params, fn p ->
cond do
String.ends_with?(p, "*") ->
params[:wildcard_terms] = [p | params[:wildcard_terms]]
true ->
params[:search_terms] = [p | params[:search_terms]]
end
end)
我现在收到cannot invoke remote function Access.get/2 inside match 错误,我不知道如何解决这个问题。
有什么建议吗?
【问题讨论】:
-
这里的根本问题是你没有以一成不变的方式思考。
params[:wildcard_terms] = [p | params[:wildcard_terms]]没有做你认为的事情。它不会更新与地图params中的键关联的值,因为您可能习惯于使用其他语言,例如 Ruby/Java/Python。这就是为什么 dogbert 的解决方案提倡使用Map.update!,它在幕后创建了一个新地图,除了与指定键对应的值之外,其他值都相同。
标签: list dictionary enums elixir reduce