在此示例中来自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
答案 0 :(得分:4)
这是完全不同的两件事。如果你做yield i
,你实际上会得到数字i,这将导致输出为1 2 3.然而,代码的要点是产生数组的元素,因此你得到self[i]
,这意味着“数组自身的第i个元素”,或者更具技术性地“使用参数[]
在self
上调用方法i
并生成结果”。
答案 1 :(得分:2)
yield(i)
将为索引生成一个块,而yield(self[i])
将为第i个元素生成一个块