我有一个名为的类Note,其中包含一个名为的实例变量time_spent.我希望能够做到这样的事情:
current_user.notes.inject{|total_time_spent,note| total_time_spent + note.time_spent}
Run Code Online (Sandbox Code Playgroud)
这可以通过在Enumerable模块中混合来实现吗?我知道你应该添加include Enumerable到类中然后定义一个each方法,但是每个方法应该是一个类还是实例方法?是什么在变each的方法?
我正在使用Ruby 1.9.2
Mic*_*ohl 87
这很简单,只需包含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)
Run Code Online (Sandbox Code Playgroud)
有关详细信息,我建议使用以下文章:Ruby Enumerable Magic:The Basics.
在您的问题的上下文中,如果您通过访问器公开的内容已经是一个集合,您可能不需要费心包括Enumerable.
| 归档时间: |
|
| 查看次数: |
27197 次 |
| 最近记录: |