如何在我的课堂上使用Enumerable mixin?
我有一个名为Note
的类,它包含一个名为time_spent
的实例variables。 我想能够做到这样的事情:
current_user.notes.inject{|total_time_spent,note| total_time_spent + note.time_spent}
这可能通过在Enumerable模块中混合? 我知道你应该添加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", "BA Barracus", "Murdoch", "Hannibal") #use any Enumerable method from here on p ateam.map(&:downcase)
有关更多信息,我build议您阅读以下文章: Ruby Enumerable Magic:The Basics 。
在你的问题的上下文中,如果你通过一个访问者公开的是一个集合,你可能不需要为包含Enumerable
而烦恼。
可枚举的文档如下:
可枚举的 mixin提供了具有几种遍历和search方法的集合类,并具有sorting的能力。 这个类必须提供一个方法, 每个方法都会产生收集的连续成员。 如果使用Enumerable#max , # min或#sort ,集合中的对象也必须实现一个有意义的<=>运算符,因为这些方法依赖于集合成员之间的顺序。
这意味着执行每个和<=>将做的伎俩。
请参阅: Enumerable