我不明白。我想将一个项目添加到列表中。但它没有用。这是我的代码:
def put_viewed(items, user_id) do
lll = []
Enum.each items, fn item ->
viewed = check_viewed(item.id, user_id)
new_item = Map.put(item, :viewed, viewed)
Enum.concat(lll, [new_item])
end
IO.inspect lll
end
我总是得到[]作为结果。与lll ++ [new_item]
答案 0 :(得分:4)
应该这样做:
def put_viewed(items, user_id) do
Enum.reduce(items, [], fn(item, acc) ->
viewed = check_viewed(item.id, user_id)
new_item = Map.put(item, :viewed, viewed)
[new_item | acc]
end)
end
你不能在Elixir中改变变量,你必须使用功能样式的东西,比如还原。
答案 1 :(得分:4)
如果您只需要处理项目列表,可以使用@JustMichael答案或只使用简单的Enum.map:
def put_viewed(items, user_id) do
Enum.map(items, fn item ->
viewed = check_viewed(item.id, user_id)
Map.put(item, :viewed, viewed)
end )
end