2012/03/05

timesメソッドをeachメソッドで書き換えてみる

timesメソッドにもブロックローカル変数がある、ということを知って へー と思ったのでメモ。 自分の頭の整理のためにtimesメソッドをeachメソッドで書き換えてみる。

timesメソッドは簡潔

簡単なコードにしておく。
flower = "Rose"

5.times do
  puts flower
end
実行すると
$ ruby times_test.rb
0Rose
1Rose
2Rose
3Rose
4Rose
こうなる。問題なし。

timesメソッドでもブロックローカル変数を定義できる

flower = "Rose"

5.times do |i|
  print flower,i,"\n"
end
実行すると
$ ruby times_test.rb
Rose0
Rose1
Rose2
Rose3
Rose4
ブロックローカル変数iに数字が順番に代入されていることがわかる。

あえてeachメソッドで書き換えてみる

flower = "Rose"
ary = [0, 1, 2, 3, 4]

ary.each do |i|
  print flower,i,"\n"
end
こんな感じになる。

こうやって見てみるとeachメソッドもtimeメソッドも結局根本は同じで、timesメソッドはeachメソッドの実行を数字配列に限定したもの、と理解できる。
また、数字配列に限定することによって、終了の数字をtimesの前に書くだけで実行してくれるようになっている、ということ。

0 件のコメント:

コメントを投稿