【问题标题】:no function clause matching in Enum.reduce/3Enum.reduce/3 中没有函数子句匹配
【发布时间】:2017-11-26 12:05:33
【问题描述】:

我在尝试对从理解中返回的列表求和时遇到此错误:

range = 1..999

multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end
IO.inspect for n <- range, multiple_of_3_or_5?.(n),
  do: Enum.reduce n, 0, fn(x) -> x end

#=> ** (FunctionClauseError) no function clause matching in Enum.reduce/3

为什么会出现这个错误?

【问题讨论】:

标签: enums elixir phoenix-framework


【解决方案1】:

Enum.reduce 的第三个参数中的函数需要有两个参数,来自可枚举的元素和一个累加器。您目前只有一个参数,x

【讨论】:

    【解决方案2】:

    第一个和第三个参数是错误的。你可以试试这个

    range = 1..999
    multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end
    for n <- range, multiple_of_3_or_5?.(n) do n end |> Enum.reduce(0, 
    fn(x, acc) -> x + acc end)
    

    range = 1..999
    multiple_of_3_or_5? = fn(n) -> (rem(n, 3) == 0 || rem(n, 5) == 0) end
    Enum.reduce_while(range, 0, fn i, acc ->
      if multiple_of_3_or_5?.(i), do: {:cont, acc + i}, else: {:cont, acc}
    end)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-03-13
      • 1970-01-01
      • 2019-08-06
      • 1970-01-01
      • 1970-01-01
      • 2017-11-30
      • 2015-03-20
      • 1970-01-01
      相关资源
      最近更新 更多