问题描述
我有一个名为 Note
的类,其中包含一个名为 time_spent
的实例变量.我希望能够做这样的事情:
I have a class called Note
, which includes an instance variable called time_spent
. I want to be able to do something like this:
current_user.notes.inject{|total_time_spent,note| total_time_spent + note.time_spent}
这是否可以通过混合可枚举模块来实现?我知道您应该将 include Enumerable
添加到类中,然后定义一个 each
方法,但是每个方法应该是类还是实例方法?each
方法中有什么?
Is this possible by mixing in the Enumerable module? I know you are supposed to do add include Enumerable
to the class and then define an each
method, but should the each method be a class or instance method? What goes in the each
method?
我使用的是 Ruby 1.9.2
I'm using Ruby 1.9.2
推荐答案
很简单,只需包含 Enumerable
模块并定义一个 each
实例方法,通常比not 只会使用其他类的 each
方法.这是一个非常简单的示例:
It's easy, just include the Enumerable
module and define an each
instance method, which more often than not will just use some other class's each
method. Here's a really simplified example:
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 可枚举魔法:基础.
For further info, I recommend the following article: Ruby Enumerable Magic: The Basics.
在您的问题的上下文中,如果您通过访问器公开的内容已经是一个集合,您可能不需要费心包含 Enumerable
.
In the context of your question, if what you expose through an accessor already is a collection, you probably don't need to bother with including Enumerable
.
这篇关于我如何在我的班级中使用 Enumerable mixin?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!