当我打电话
@data.each do |d|
some code here
end
该each方法返回什么?对象数组?或者更一般地说,do... endblock 需要什么?
它遍历可枚举对象的成员。因此,如果@data是一个数组,它将一次返回一个数组的元素作为d. 确切的行为取决于对象的类型。查看文档
Books.all返回一个对象,虽然它不是一个数组,但在这种情况下表现得像一个。
each returns the receiver, in this case @data.do ... end is a block.该方法将为数据中的每个值each运行一次块(使用方法)。yield这称为迭代器。对于数组,它将遍历数组中的所有值,对于散列,它将每对 (key,value) 运行一次。您可以为自己的类定义自己的迭代器。
的返回值each取决于它被调用的对象。在数组上调用时,它将返回数组。
在您的情况下,该方法each将为每个值执行一次块,并将每个值作为参数发送到块。
例如-
a = [1,2,3]
a.each do |n|
p n
end
和
p a[0]
p a[1]
p a[2]