2012/01/01

ブロックと変数のスコープ

プログラミング言語 Rubyより

囲っているスコープの変数を意図せずに書き換えてしまう場合もある。特に、Ruby1.8のブロックのパラメータでは、この問題が起きやすい。Ruby1.8では、ブロックパラメータが既存の変数と同じ名前だと、ブロックが実行されたときに、新しいブロックローカルな変数が作られるのではなく、既存の変数に値が代入されてしまう。

プログラミング言語 Ruby 第2版 148ページ ブロックと変数のスコープ
1.upto(10) do |i|
  1.upto(10) do |i|
    print "{i} "
  end
  print " ==> Row #{i}\n" # 行番号を出力しているつもりだが、列番号になっている
end