Ruby内置迭代器中的额外块变量有什么作用?

时间:2017-11-07 21:48:22

标签: ruby

假设您在范围内使用内置迭代器.each方法:

(0..3).each do |x,y,z,a,b,c|
end

我知道x是集合中的实际项目,但是为块定义其他块变量(y,z,a,b,c)实际上做了什么?他们代表什么?

2 个答案:

答案 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