ブロックパラメータは外部から継承

Rubyでは、ブロックパラメータと同じ名前の変数が前にあったらそれを使います。ブロックパラメータは新しいスコープを作るわけではないのでしょうか。これはちょっと驚きです。

a = [ 1, 2, 3 ]
rubyco = 100
p rubyco            # => 100
a.each { |rubyco|
    # ...
}
p rubyco            # => 3

もしも前になかったら、外に飛び出せるわけではないようです。

a = [ 1, 2, 3 ]
a.each { |rubyco|
    p rubyco
}
p rubyco

実行結果はこうなります。

1
2
3
undefined local variable or method `rubyco' for main:Object (NameError)