09/07/03 15:05:25
Rubyは local や my といった予約語を使わずに、文脈上でスコープを定義する
ブロック内に変数が出現したとき、その時点で可視かどうかで
可視 → その変数を使う(つまり、書き換える)
不可視→ 新規変数(ブロックローカル)として定義する
という動作になってる
>>346では [1, 2, 3].each のブロック内での s は可視なので、変数を単に再利用する
これを最初から不可能にすることもできなくはなかったんだが、そうすると
out = 外部データ'
someblock do |s|
puts out #=> undefined
end
というように、ブロック外の変数にアクセスする方法がなくなってしまう