2015-06-18 2 views
0

Пожалуйста, почему tableroA запустить без проблем и tableroB ошибка прибудет»... протокол перечислимый не реализованы {1, 1 , 1}»в следующем коде:Elixir HashDict (Protocol.UndefinedError) протокол перечислимый не реализован {1, 1, 1}

def tableroA do 
### generamos la rejilla 
    s=Enum.to_list(1..9) 
    rejilla=for cada <- s, fila <-[1,2,3], col <- [1,2,3], do: {cada, fila, col} 
    convalor=Enum.map(rejilla, &({&1,2})) 
    Enum.into(convalor, HashDict.new)         
end 
def tableroB do 
    ### generamos la rejilla 
    s=Enum.to_list(1..9) 
    for cada <- s, fila <-[1,2,3], col <- [1,2,3], do: {cada, fila, col} 
    |>Enum.map(&({&1,2})) 
    |>Enum.into(HashDict.new)         
end 

ответ

4

из-за старшинства |> оператора код интерпретируется как:

for cada <- s, fila <-[1,2,3], col <- [1,2,3], do: (
    {cada, fila, col} 
    |>Enum.map(&({&1,2})) 
    |>Enum.into(HashDict.new) 
) 

Чтобы устранить его, вы можете либо поместить для понимания в parenth ESES:

(for cada <- s, fila <-[1,2,3], col <- [1,2,3], do: {cada, fila, col}) 
|> ... 

Или использовать явные делать/концевые блоки:

for cada <- s, fila <-[1,2,3], col <- [1,2,3] do {cada, fila, col} end 
|> ... 
+0

Спасибо очень много – user1694815

+1

Если @sasajuric дал вам правильный ответ, вы должны отметить его ответ принят. –

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