我有一个数组,我需要创建一个名为“each”的类方法来生成或返回(不确定那些或者我需要使用的差异,如果有的话)当方法是调用。
我是否需要使用return而不是yield?
class Sum
def initialize
@sum = Array.new
end
def each
@sum.each do |item|
yield item
end
end
答案 0 :(得分:3)
您可以加入Enumerable
并实施each
并免费获得许多功能。
class Sum
def initialize
@sum = []
end
def each &block
@sum.each &block
end
end
这将是yield
集合中的每个项目,或者如果您不提供阻止,它将返回一个与普通Array
答案 1 :(得分:1)
您是否正在尝试编写一个类似于迭代器的类?那提供了自己的each
形式?如果是这样,那么这就是使用ruby类这样做的模式:
class MyIterator
include Enumerable
def initialize data=[]
@data = data
end
def each
@data.each do |item|
yield item
end
end
end
m = MyIterator.new [1,2,3,4]
m.each do |item|
puts "item=#{item}"
end
puts m.map(&:next)
for_each
方法迭代数组(@data
)并将每个值都生成块。
正如@ jan-dvorak指出的那样,包括Enumerable
并命名方法each
会带来额外的好处,例如能够直接在对象上调用map
。
答案 2 :(得分:0)
假设这是作业,并且不允许使用现有的each
方法:
class Sum
def initialize
@values = []
end
def homework_each
0.upto(@values.length-1){ |i| yield @values[i] }
end
end
但是,您的代码作为书面作品,模仿了您错过end
的事实,而且您也错过了使用值填充数组的任何方法。