Enum.reduce returns 模型而不是数字

Enum.reduce returns a model instead of a number

在我的模型中我有这个:

  # ....
  def total_price(self) do
    Enum.reduce(self.child_items, fn(x, acc) ->
      x.price + acc
    end)
  end

它 returns 是一个 ChildItem 而不是代表总价的数字。为什么会这样?如何解决?

Enum.reduce 有两个版本:reduce/2 and reduce/3。接受 2 个参数的那个将集合中的第一个元素作为初始累加器 - 在你的例子中是第一个 ChildItem.

你要做的是提供初始成本0作为你自己的累加器:

  def total_price(self) do
    Enum.reduce(self.child_items, 0, fn(x, acc) ->
      x.price + acc
    end)
  end