2017-12-11 6 views
-1

나는 그것을 얻지 못한다. 목록에 항목을 추가하고 싶습니다. 하지만 작동하지 않습니다. 여기 내 코드 :목록에 항목 추가하기

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]

답변

3

와 동일 :

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 

당신은 엘릭서에서 변수를 돌연변이 수 없습니다, 당신은 감소와 같은 기능적인 스타일의 물건을 사용 해요.

+0

이 사람은 일을했다합니다. 감사. 이제는 Enum으로 조금 더 깊어졌습니다. 감소, 튜토리얼을 만들고 자습서를 만들고, 줄이면 어떻게 작동합니까? – Sardoan

3

당신은 @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 
+0

줄이실 필요가 없습니다! – JustMichael

+0

이 방법은 하나의 요소 만 가져 왔습니다. 항목 수가 1을 초과하면 함수는 하나의 요소 만 반환합니다. – Sardoan