From: "村上 友洋" Date: 2013-03-06T15:49:22+09:00 Subject: [ruby-list:49256] Re: forループ内の変数のスコープに関して 小柳さん。ありがとうございます。 村上です。 ruby 1.9.3p392では上手くいきました。 ただruby 1.8.7 (2012-02-08 patchlevel 358) [universal-darwin12.0]ではforループと同様の結果になってしまいました。 バージョンアップの際にこの辺が改善されたようですね。 On 2013/03/06, at 15:36, 小柳真太 wrote: > 村上さん > こんにちは > 小柳と申します > >> ループ内で使用される変数の有効範囲をループ内だけに限定させることはできないのでしょうか? > そういう挙動を求めるとき、私なら下記の様に書きます。 > #---------------- > a=4 > > (0..10).each do |a| > print "a="< end > > p a > #---------------- > do ... end や { } によるブロックをつかうと、その内側でのみ有効なブロック変数を使う事ができます。 > > 参考 URL > http://doc.ruby-lang.org/ja/1.9.3/doc/spec=2fcontrol.html#for > > > 2013年3月6日 15:20 村上 友洋 : > >> 初めまして。 >> メーリングリストに初投稿させていただきます 村上 と申します。 >> >> 変数のスコープに関して質問というか気になる点がありましたのでこのメールを出させていただきました。 >> 以下のコードを実行したところ >> #---------------- >> a=4; >> >> for a in 0..10 >> print "a="<> end; >> >> p a; >> #---------------- >> #実行結果 >> $/usr/local/bin/ruby -v >> ruby 1.9.3p392 (2013-02-22 revision 39386) [x86_64-darwin12.2.1] >> $/usr/local/bin/ruby sample.rb >> a=0 >> a=1 >> a=2 >> ~ >> a=8 >> a=9 >> a=10 >> 10 >> >> >> という結果が出力されました。自分としては変数aの最後の出力値は4であることを期待していたのですが、10となってしまいました。forループ内で使用される変数の有効範囲をループ内だけに限定させることはできないのでしょうか? >> 似たようなことをC言語で組んだところforループ内の変数の宣言の仕方によって結果が異なりました。 >> #------------------- >> int a=4; >> for(int a=0;a<10;a++){ >> printf("a=%d\n",a); >> } >> >> printf("%d\n",a); >> #------------------- >> #実行結果 >> a=0 >> a=1 >> a=2 >> ~ >> a=8 >> a=9 >> 4 >> >> #-------------------- >> int a=4; >> for(a=0;a<10;a++){ >> printf("a=%d\n",a); >> } >> >> printf("%d\n",a); >> #--------------------- >> #実行結果 >> a=0 >> a=1 >> a=2 >> ~ >> a=8 >> a=9 >> 10 >> >> > > > -- > :-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: > 小柳 真太 yancya@upec.jp http://upec.jp > :-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-:-: