Elixir HashDict(Protocol.UndefinedError)协议未为{1,1,1}实现的可枚举

时间:2015-06-18 08:57:28

标签: dictionary hash pipe elixir enumerable

请为什么 tableroA 在没有问题的情况下运行, tableroB 在下一段代码中获取错误“...协议可以为{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

1 个答案:

答案 0 :(得分:4)

由于|>运算符的优先级,您的代码被解释为:

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

要解决它,你可以在括号中理解:

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

或使用显式的do / end块:

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