假设您在范围内使用内置迭代器.each
方法:
(0..3).each do |x,y,z,a,b,c|
end
我知道x是集合中的实际项目,但是为块定义其他块变量(y,z,a,b,c
)实际上做了什么?他们代表什么?
答案 0 :(得分:2)
如果方法没有给出值,那么附加变量将为零。 运行时:
(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
答案 1 :(得分:2)
他们不做"做"任何东西。如果你尝试它,你会发现它们是零。
(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
将保留范围项目,我是它的索引,即0,1,2
或者像哈希一样:
{a: 1, b: 2, c: 3}.each do |k,v|
puts k
puts v
end
a:
1
b:
2
c:
3