Bye Bye Moore

PoCソルジャーな零細事業主が作業メモを残すブログ

Rubyにおけるレアケースfor文による繰り返し表現について

コードリーディング中に久々にforを見かけたのでメモします。

Rubyにもfor文による繰り返し表現があります。
たとえば、多重配列を弄るには以下のようにします。

for first, second, third in [[1,2,3],[4,5,6],[7,8,9]]
  puts first, second, third
end  

これをeachで書き直すと

 [[1,2,3],[4,5,6],[7,8,9]].each {|first, second, third| puts first, second, third}
#=> 6
#=> 15
#=> 24

となります。
完全に同じモノというわけでもなく

do ... endまたは{ }による ブロックは新しいローカル変数の有効範囲を導入するのに対し、 for文はローカル変数のスコープに影響を及ぼさない点が異なる

と、なんと内部で使った変数を後で呼び出す事ができます

first = 5
#=> 5

for first, second, third in [[1,2,3],[4,5,6],[7,8,9]]
  p first, second, third
end  
#1
#2
# ...
#7
#8
#9
#=> [[1, 2, 3], [4, 5, 6], [7, 8, 9]]

first
#=> 7

下手に別のローカル変数なんぞを指定するとエラい事になります。

なるべく使わない

Ruby文化圏でforを使うケースは稀です。
自分でスクリプトを各場合には極力使わないようにしましょう。

参考もと