gpt4 book ai didi

ruby-on-rails - 为什么我需要使用 .inject(0) 而不是 .inject 来完成这项工作?

转载 作者:数据小太阳 更新时间:2023-10-29 06:43:07 24 4
gpt4 key购买 nike

我正在创建一个 Rails 应用程序并在我的一种方法中使用了这段代码

item_numbers.inject(0) {|sum, i| sum + i.amount}

item_numbers 是我的 item_numbers 表中的对象数组。我应用于它们的 .amount 方法在单独的表中查找 item_number 的值并将其作为 BigDecimal 对象返回。显然,注入(inject)方法然后添加所有返回的 i.amount 对象,这工作得很好。

我很好奇为什么当我写这个语句时它不起作用

item_numbers.inject {|sum, i| sum + i.amount}

根据我可靠的镐书,这些应该是等价的。是因为 i.amount 是 BigDecimal 吗?如果是这样,为什么它现在起作用了?如果没有,那为什么它不起作用。

最佳答案

我们可以在 API 中读取的内容:

If you do not explicitly specify an initial value for memo, then uses the first element of collection is used as the initial value of memo.

因此 item_numbers[0] 将被指定为一个初始值——但它不是一个数字,它是一个对象。所以我们有一个错误

undefined method `+'.

所以我们必须指定初始值为0

item_numbers.inject(0){ |sum, i| sum + i }

关于ruby-on-rails - 为什么我需要使用 .inject(0) 而不是 .inject 来完成这项工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2491570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com