是否有必要参考自我:yield(self [i])

时间:2009-09-16 17:42:38

标签: ruby yield self

在此示例中来自a blog post

class Array
  def each
    i = 0
    while(i < self.length) do
      yield(self[i])
      i += 1
    end
  end
end

my_array = ["a", "b", "c"]
my_array.each {|letter| puts letter }
# => "a"
# => "b"
# => "c"

是否有必要在声明中使用self

yield(self[i])

或者只是简单地说:

yield i

2 个答案:

答案 0 :(得分:4)

这是完全不同的两件事。如果你做yield i,你实际上会得到数字i,这将导致输出为1 2 3.然而,代码的要点是产生数组的元素,因此你得到self[i] ,这意味着“数组自身的第i个元素”,或者更具技术性地“使用参数[]self上调用方法i并生成结果”。

答案 1 :(得分:2)

yield(i)将为索引生成一个块,而yield(self[i])将为第i个元素生成一个块