2015-11-08 3 views
2

Как мне перебирать пары ключ-значение из словаря и получать значения для каждого элемента? Я придумал это, но я продолжаю получать ошибки ...Зацикливание значений в dict

defp processValues (ticket) do IO.inspect ticket.value # this doesnt work end

Repo.all(Ticket) #get all tickets |> Enum.group_by(&(&1.aggregate_id)) # group by id |> Dict.to_list # maybe not needed? |> Enum.map(&(processValues(&1))) # return processed tickets

ответ

0

Чтобы указать функцию сопоставления, которая уже определена в модуле, вам необходимо использовать синтаксис &ModuleName.function_name/arity. В вашем случае это будет &processValues/1.

Вот упрощенный пример, чтобы продемонстрировать концепцию:

list = [%{aggregate_id: 1, value: "test"}, %{aggregate_id: 2, value: "test2"}] 

defmodule T do 
    defp processValues(ticket) do 
     IO.inspect ticket.value 
    end 

    def process_list(list) do 
     list |> Enum.map(&processValues/1) 
    end 
end 

T.process_list list  
0

Взгляните на this documentation. Я хотел бы специально обратить ваше внимание на эту часть документации:

iex> for {key, val} <- %{"a" => 1, "b" => 2}, into: %{}, do: {key, val * val} 
%{"a" => 1, "b" => 4} 

Вы бы хотели что-то похожее на

for {key, value} <- ticket, do: process_values(value) # Note snake case. 

Также отметим, что верхний регистр «T» является неправильным. Это должно быть нижний регистр «t». Я имею в виду, что в вашем примере это должно быть Repo.all(ticket) не Repo.all(Ticket) Но, честно говоря, немного сложно сказать, что вы пытаетесь сделать. Если у вас есть более конкретный вопрос, пожалуйста, отредактируйте, и мы увидим, можем ли мы дать вам более конкретный ответ.

Смежные вопросы