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】:由于|>
运算符的优先级,您的代码被解释为:
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 实现的主要内容,如果未能解决你的问题,请参考以下文章