我最近遇到了一个问题,大小数之和返回的不是大小数,而是整数.

sig { returns(BigDecimal) }
def period_hours
  @applicable_items.sum { |payroll_item| payroll_item.hours_worked.to_d }
end

其中@applicable_items返回PayrollItem的array.

我得到的错误:

Return value: Expected type BigDecimal, got type Integer with value 0

此外,RubyMine还警告返回类型不兼容:

Incompatible types
Required:
BigDecimal
Returned:
Integer

我认为我可以很容易地通过在末尾添加to_d来逃脱,就像这样:

@applicable_items.sum { |payroll_item| payroll_item.hours_worked.to_d }.to_d

但是,我仍然很好奇,为什么它可能返回Integer而不是BigDecimal,而总和的所有值都已经使用to_d进行了转换.

非常感谢!

推荐答案

这样地:

irb(main):003:0> [].sum &:to_d
=> 0

Ruby-on-rails相关问答推荐

Ruby线程使用互斥处理并发问题

在数组中定位不匹配的索引

带有 simple_form 的按钮内的 HTML 代码

如何使用 Vim 插入 ERB 标签?

您将如何在 Ruby on Rails 应用程序中使用 rSpec 测试观察者?

如何按值按降序对哈希进行排序并在 ruby​​ 中输出哈希?

form_tag 是否与 Simple_form 一起使用?

在 Controller 中调用模型方法

我可以将默认值传递给 rails 生成迁移吗?

登录delay_job?

用户注册时设计确认令牌无效

Rails 3 返回 HTTP 406 Not Acceptable?

如何在两个字段上对 ruby​​/rails 进行排序?

长期运行项目中的 Rebase Rails 迁移

从 Rails 中的 ActiveRecord::RecordNotFound 救援

如何在 Rails 迁移中判断数据库类型?

使用redirect_to后如何停止控制器执行? (使用导轨)

如何检测rails是否在根url?

Ruby 中的类别名

Rails.cache 在测试之间被清除了吗?