From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-07-31T19:56:16+09:00 Subject: [ruby-dev:27] Re: meta programming features けいじゅ@今日でフリーは終り(;_;です. In [ruby-dev :00023 ] the message: "[ruby-dev:23] Re: meta programming features ", on Jul/31 17:22(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >|そうすると, 参照に関しては静的なスコープ(BarClass)になるが代入される変 >|数は動的なスコープ(FooClass)になるってことですか? > >そうなりますね. >|class BarClass >| Foo = "Bar" >| FooClass.eval "Foo = Foo" >|end >| >|は, FooClass::Foo = BarClass::Foo がおこなわれることになる?? > >そうなりますね. > >|分かりやすいような分かりにくいような... > >そうですね.どうしたら分かりやすいと思いますか? 分かりにくいとか何とかという問題よりも, この仕様で本当に矛盾がないかが 不安ですよね. それさえなければ, これでもまあいいかとは思うのですが... ローカル変数の場合も同じになるんですかね? class BarClass foo = "Bar" FooClass.eval " print foo foo = 'Foo' print foo" print foo end は どうなるんでしょう? 静的変数と同じ動作? そうすると, 静的変数もローカル変数も代入だけで参照ができないってことに なりますね. それは問題のような... いま, 別スレッドでやっている静的変数の問題と同じになっていればいいのか な? つまり, 代入された時点で参照すべき静的変数が変更される. つまり, 上 記の場合: class BarClass foo = "Bar" FooClass.eval " print foo #BarClass::foo foo = 'Foo' #FooClass::fooへの代入 print foo" #FooClass::fooの参照 print foo end という感じです. この場合ローカル変数なのでちょっと違和感がないでもない ですが, 別スレッドのが実現されたら, 静的変数の場合まさにこのような動作 になりますものね? ということで, 上記のような動作は, それほど矛盾していないし道理にも実は あっているということで納得しました. 話しは違うというか, ローカル変数の問題にはからむんですが, 以下のはでき なかったんですね: class BarClass foo = "Bar" class FooClass print foo # undefind variable end end これっていうのは, 内側のclass...でコンテキストが変わっているんですね? その時, 静的変数は引き継いでいるが, ローカル変数は引き継いでいないと? __ .........................................石塚 圭樹@今はフリー(^^;;... ------->>また, アドレス変わりました!! e-mail: keiju@bc.mbn.or.jp <<---