注: GitHubの mischa のsplat には、動作中の * のクールでインタラクティブな例がたくさんあります。
グーグルで調べたところ、Ruby で数値の範囲を反復処理する 1 つの方法 (古典的な C スタイルの for ループ) が見つかりました。
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 Way は配列またはコレクションを反復処理することであり、配列の長さを使用して整数インデックスを反復処理することではありません。ただし、この例では、実際には整数のリストを扱っています。:)