From: TEI meiki Date: 1998-06-25T02:38:04+09:00 Subject: [ruby-list:8499] Re: scope of local variables 鄭です。 便乗質問、って言うか、確認、っていうか、、、、 書いているうちに自分で納得してしまったので、言いたいことが ほとんど無くなってしまったのですが、とりあえず、このメール出します。(^^;) Yukihiro Matsumoto writes: > |イテレータ内の変数って、一度ループを回るごとに未定義状態にな > |るのでしょうか。毎回yieldされることを考えると当然そうなのか > |な。 > > ブロック内で初出の変数(ブロック内ローカル変数)は毎回初期化さ > れます. イテレータブロックの引数も、ローカル変数なんですよね。 以前、こんなふうに組んで、 a = [1,2,3,4,5] print "outside a = "; p a a.each { |a| print "a=",a,"\n" } print "outside a = "; p a こんな実行結果になって、ありゃりゃと変数名を変えました。 outside a = [1, 2, 3, 4, 5] a=1 a=2 a=3 a=4 a=5 outside a = 5 つい、|a| は、イテレータブロック内だけで有効なローカル変数だと 考えてしまった失敗です(でした)。 独白: もしもイテレータブロックの引数はイテレータブロック内で新たに定義された ローカル変数である、、という言語仕様にしたら他に悪影響が有るのかな? P.S. いろいろ、いたずらしているうちにこんなケースで core dump しました。 例によって [BUG]の表示が有ったので報告します。 % cat /tmp/te.rb [1,2,3].each { |B| print "B=",B,"\n" } % ruby /tmp/te.rb B=1 /tmp/te.rb:2: [BUG] Segmentation fault zsh: IOT instruction (core dumped) ruby /tmp/te.rb -- ┌─鄭 明毅───────────────────┐ └──tei@harmony.co.jp──tei@mirage.linc.or.jp─┘