From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-08-18T12:57:29+09:00 Subject: [ruby-dev:154] Re: meta programming features けいじゅ@日本ラショナルです. In [ruby-dev :00149 ] the message: "[ruby-dev:149] Re: meta programming features ", on Aug/18 09:35(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >まつもと ゆきひろです >|そういう手もありますね. でも, そのメソッドを object_evalとすると. >|foo.object_eval "def func..." >|は特異メソッドの定義とするんですか? > >その方が良いかも. そうですねえ... そうなると, object_evalというよりも, single_eval(singuler_eval?) って感じですね. それはそれであって良いと思 いますが, メソッド的に呼び出したとしても, 特異クラスへの定義だけが行い たいとは限らないので, 今の仕様のevalもpublicにして頂いて, Object#eval Object#single_eval の両方を用意してもらえるとありがたいですね. あとは, 必要に応じて使いわ けができればいいかなと... # まあ, なくても, # # obj.single_eval "eval '...'" # # でprivate evalは呼べるんですが... >|あとは, Object#evalの問題ですね. 名前を別にするのか? 別にするとしてそ >|のメソッドの仕様はどうするか? > >やっぱり名前違った方が良い気がして来たなあ. では, そういう方向で検討してみましょう. In [ruby-dev :00151 ] the message: "[ruby-dev:151] Re: meta programming features ", on Aug/18 09:36(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >|了解しました. ということは, rubyの用語(実装上の用語を省く)上では特異ク >|ラスという言葉はなくなるんですね? > >そういうことになりますね. 了解. >|クラス定数はどうします? 仮想的なクラスとなるとクラス定数を持つのも変か >|なという気もしますが?? まあ存在するとしても, 特異メソッドと同じく特異 >|クラス定数であると考えればいいのかな? >| >|# 私は残しておいて欲しいんですけどね. > >禁止する必然性もないように思うので残しましょう.とはいえ, > > class << obj > Foo = 5 > def foo > Foo # (1) > end > self::Foo # (2) > end > >のどちらかの方法でしかアクセスできませんけどね. ああ. これはobjがクラスの場合ですよね. objが通常のインスタンスの場合に 利用価値があると思っています. (大文字で始まる)インスタンス定数みたいな 使い方ができますので. >|前に議論のあった, Module#evalは, >| >| * ローカル変数は静的スコープで共有 >| * クラス定数は静的スコープで参照可能(selfのクラス定数優先) >| >|という仕様になったと思いますが, この仕様と上記のメソッドevalの仕様とが >|食い違っているのが気になるんですけど. > >食い違っています? ローカル変数についてはなにも説明していな >いので食い違うということはないと思うのですが. そうですね. ローカル変数については何もいっていませんでした, これは静的 スコープで共有すると思っていいんでしょうか? それから, クラス定数の辺りに関しては, 異なっていると思うんですけど? > * メソッド的アクセスの場合には(そのインスタンス内部からの > アクセスということで)適切な静的なスコープは存在しないだ > けでなく,メソッド呼び出し元のスコープを参照するべきでは > ない ということは: class Foo XX = "Foo" def foo Bar.eval "YY = XX" end end 見たいな使い方は, できないといっていませんか? >|特異メソッドfoo.fは存在するが, メソッドFoo#fが存在しない場合は, 分かる >|と思いますが, メソッドFoo#fが存在している時に特異メソッドfoo.fが存在す >|るかどうかは分からないのでは? >そうか,そうですね.それでは > > class << obj > self.instance_methods.include?("foo") > end > >ではどうでしょう? v1.1a0のinstance_methodsの仕様を読むと, 無理かなと思うんですが?? Class#instance_methodsはそのインスタンスが分かるメソッド全てを返すんで すよね? それとも, そのクラスの属するメソッドだけ返す? __ ..........................................石塚 圭樹@日本ラショナル... ----------------------------------->> e-mail: keiju@bc.mbn.or.jp <<---