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



假设您是否在某个范围内使用内置迭代器.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

最新更新