我刚刚问了一个关于Ruby中循环的问题.这两种迭代集合的方式有区别吗?
# way 1
@collection.each do |item|
# do whatever
end
# way 2
for item in @collection
# do whatever
end
只是想知道它们是否完全相同,或者是否存在细微的差异(可能是@collection
为零时).
我刚刚问了一个关于Ruby中循环的问题.这两种迭代集合的方式有区别吗?
# way 1
@collection.each do |item|
# do whatever
end
# way 2
for item in @collection
# do whatever
end
只是想知道它们是否完全相同,或者是否存在细微的差异(可能是@collection
为零时).
这是唯一的区别:
each:
irb> [1,2,3].each { |x| }
=> [1, 2, 3]
irb> x
NameError: undefined local variable or method `x' for main:Object
from (irb):2
from :0
for:
irb> for x in [1,2,3]; end
=> [1, 2, 3]
irb> x
=> 3
对于for
循环,迭代器变量在块完成后仍然有效.对于each
循环,它不会,除非它在循环开始之前已经被定义为局部变量.
除此之外,for
只是each
方法的语法糖.
当@collection
为nil
时,两个循环都会引发异常:
异常:未定义的局部变量或main:Object的方法"@collection"