注意:mischa的
splat on GitHub有很多很酷的交互式实例*.
通过谷歌搜索,我发现在Ruby中迭代一系列数字的一种方法(你的经典C风格的循环)
for (i = first; i <= last; i++) { whatever(i); }
是做这样的事情
[*first..last].each do |i| whatever i end
但是那个[* first..last]语法究竟发生了什么?我玩了irb,我看到了这个:
ruby-1.9.2-p180 :001 > 0..5 => 0..5 ruby-1.9.2-p180 :002 > [0..5] => [0..5] ruby-1.9.2-p180 :003 > [*0..5] => [0,1,2,3,4,5] ruby-1.9.2-p180 :004 > *0..5 SyntaxError: (irb):4: Syntax error,unexpected tDOT2,expecting tCOLON2 or '[' or '.' *0..5 ^
我在网上看到的所有内容都讨论了一元星号对扩展和折叠传递给方法的参数很有用,对于可变长度参数列表非常有用
def foo(*bar) bar end foo 'tater' # => ["tater"] foo 'tater','tot' # => ["tater","tot"]
我得到了,但我不知道它如何适用于我上面的块示例中的扩展.
要清楚,我知道Ruby方法是迭代数组或集合,而不是使用数组长度并使用整数索引进行迭代.但是,在这个例子中,我真的在处理一个整数列表.