Elixir HashDict (Protocol.UndefinedError) 协议 Enumerable 未为 1, 1, 1 实现

Posted

技术标签:

【中文标题】Elixir HashDict (Protocol.UndefinedError) 协议 Enumerable 未为 1, 1, 1 实现【英文标题】:Elixir HashDict (Protocol.UndefinedError) protocol Enumerable not implemented for 1, 1, 1Elixir HashDict (Protocol.UndefinedError) 协议 Enumerable 未为 1, 1, 1 实现 【发布时间】:2015-09-03 19:45:44 【问题描述】:

请,为什么 tableroA 运行没有问题,而 tableroB 在下一个代码中得到错误“...protocol Enumerable not implemented for 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】:

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

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

要解决它,您可以将 for comprehension 放在括号中:

(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
|> ...

【讨论】:

以上是关于Elixir HashDict (Protocol.UndefinedError) 协议 Enumerable 未为 1, 1, 1 实现的主要内容,如果未能解决你的问题,请参考以下文章

简单Elixir游戏服务器-安装Elixir

Elixir快速介绍

Erlang - Elixir:啥是监督树?

Elixir东游记/上:intro/1

混合 Elixir 和 Erlang?

使用 Erlang 的 Elixir 模块失败