假设您是否在某个范围内使用内置迭代器.each
方法:
(0..3).each do |x,y,z,a,b,c|
end
我知道 x 是集合中的实际项目,但是为块定义额外的块变量 ( y,z,a,b,c
) 实际上有什么作用?它们代表什么吗?
如果该方法没有给出值,则其他变量将为 nil。运行时:
(0..3).each do |x,y|
puts x.class.to_s() + ' ' + y.class.to_s()
end
它输出:
Integer NilClass
Integer NilClass
Integer NilClass
Integer NilClass
这完全取决于方法发送的内容:
def myBlockCaller
yield 1, 2, 3
yield 'a', '5'
yield true
yield nil, 1
end
myBlockCaller do |x, y, z|
puts x.class.to_s() + ', ' + y.class.to_s() + ', ' + z.class.to_s()
end
显示:
Integer, Integer, Integer
String, String, NilClass
TrueClass, NilClass, NilClass
NilClass, Integer, NilClass
他们不"做"任何事情。如果你尝试一下,你会发现它们是零的。
(0..3).each do |x,y,z,a,b,c|
puts x.inspect
puts y.inspect
puts z.inspect
puts a.inspect
puts b.inspect
puts c.inspect
end
1
nil
nil
nil
nil
nil
2
nil
nil
nil
nil
nil
3
nil
nil
nil
nil
nil
一些迭代器使用多个变量,如each_with_index
:
(1..3).each_with_index do |n,i|
n
将保存范围项,i 是它的索引,即 0,1,2
或者在哈希中,例如:
{a: 1, b: 2, c: 3}.each do |k,v|
puts k
puts v
end
a:
1
b:
2
c:
3