`each`方法返回什么?

`each`方法返回什么?

问题描述:

当我打电话`each`方法返回什么?

@data.each do |d| 
    some code here 
end 

什么是each方法的返回?一组对象?或者更一般地说,do ... end块取什么?

+4

[文件](http://rdoc.sourceforge.net/doc/)说..什么? – 2013-03-19 00:45:04

+0

它是来自控制器的实例变量。例如,@books = Book.all我不知道它是什么特定的结构 – OneZero 2013-03-19 00:45:15

+3

然后,你最好找出答案。我投票不是一个真正的问题,因为一旦类型已知,那么它只是“什么是阵列#每?”或者“什么是哈希#每个?”或“每个x#是什么?”这些内容包含在适当的参考资料中。 (它来自[ActiveRecord](http://guides.rubyonrails.org/),也有相关文档。) – 2013-03-19 00:45:32

它遍历可枚举对象的成员。因此,如果@data是一个数组,它将一次返回数组中的元素,即d。确切的行为取决于对象的类型。请参阅docs

Books.all返回一个对象,虽然它不是数组,但在这种情况下的行为如同一个。

  • each返回接收器,在这种情况下为@data
  • do ... end是一个块。

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]