2

ruby docsには、次のテキストがあります。

ブロックパラメータは実際にはローカル変数です。ブロックの実行時に同じ名前の既存のローカルが存在する場合、その変数はブロックの呼び出しによって変更されます。これは良いことかもしれませんし、そうでないかもしれません。

私はこれをテストするために以下のコードを書きました:

x = 0
3.upto(6) {|x| puts x}
puts x

# output are:
# 3
# 4
# 5
# 6
# 0

変数xは変更されません。なんで?これはドキュメントに反します。

4

1 に答える 1

8

Ruby 1.8 以前はそうでした。1.9 から、ブロック変数はローカル変数を隠します。

要するに、あなたが読んでいるドキュメントとテストしている Ruby は同じバージョンではありません。

于 2012-10-28T14:53:02.277 に答える