我有一个名为Note的类,其中包括一个名为time_spent的实例变量.我希望能够做到这样:

current_user.notes.inject{|total_time_spent,note| total_time_spent + note.time_spent}

这是不是可以在Enumerable module%的范围内混合?我知道你应该在类中添加include Enumerable,然后定义一个each方法,但是每个方法应该是类还是实例方法?each方法中有什么?

我使用的是Ruby 1.9.2

推荐答案

这很简单,只需包含Enumerable模块并定义一个each实例方法,它通常只会使用其他类的each方法.下面是一个非常简单的例子:

class ATeam
  include Enumerable

  def initialize(*members)
    @members = members
  end

  def each(&block)
    @members.each do |member|
      block.call(member)
    end
    # or
    # @members.each(&block)
  end
end

ateam = ATeam.new("Face", "B.A. Barracus", "Murdoch", "Hannibal")
#use any Enumerable method from here on
p ateam.map(&:downcase)

要了解更多信息,我推荐以下文章:Ruby Enumerable Magic: The Basics.

在你的问题中,如果你通过访问器公开的已经是一个集合,你可能不需要费心包括Enumerable个.

Ruby相关问答推荐

Ruby;人;docs-使用\";?

每次调用返回新的 REST 响应的 Ruby Rspec class_double

如何从 DateTime 值中删除区域?

厨师从源代码安装和更新程序

ruby `encode': "\xC3" 从 ASCII-8BIT 到 UTF-8 (Encoding::UndefinedConversionError)

在 MacOS Sierra 上使用 RMagick 2.16 的 ImageMagick 7 找不到 MagickWand.h

用于 ruby​​ gems 的新 10.9 OSX 的命令行工具?

创建一个哈希值作为数组和默认值作为空数组

从索引到字符串结尾的子字符串的Ruby成语

用mustache迭代数组

如何删除字符串中的重复空格?

查找两个数组之间的共同值

我不明白Ruby本地范围(local scope)

如何删除Ruby中数组中满足条件的所有元素?

将哈希转换为 struct

如何在Ruby中获取给定月份的天数,占年份?

判断字符串是否为空的Ruby方法?

如何在 Ruby 中使用全局变量或常量值?

Ruby 类继承:什么是`<<`(双倍小于)?

查找两个数组的共同点