迭代一个Ruby数组并获取(产生或返回)数组中的每个项目

时间:2014-02-15 18:21:29

标签: ruby

我有一个数组,我需要创建一个名为“each”的类方法来生成或返回(不确定那些或者我需要使用的差异,如果有的话)当方法是调用。

我是否需要使用return而不是yield?

class Sum

 def initialize
   @sum =  Array.new
 end

 def each
 @sum.each do |item|
   yield item
 end 

end

3 个答案:

答案 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的事实,而且您也错过了使用值填充数组的任何方法。