From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?= ) Date: 1997-08-27T18:46:32+09:00 Subject: [ruby-dev:286] Re: [BUG] MLF けいじゅ@日本ラショナルソフトウェアです. In [ruby-dev :00285 ] the message: "[ruby-dev:285] Re: [BUG] MLF ", on Aug/27 18:33(JST) matz@netlab.co.jp (Yukihiro Matsumoto) writes: >まつもと ゆきひろです >|>ここで定義したfailはException2MessageMapperの特異メソッドに >|>なります. >|> >|> public :fail >|> >|>ここでpublicにするfailはObject#failです.ですから, >| >|え? 何でそうなるんですか? 良く理解できないんですが... > >なんでわかんないかな? だってぇ.... > Module#module_evalの中でのdefはそのモジュール(あるいはクラ > ス)にメソッドを定義しますが,Object#instane_evalの中での > defはそのオブジェクトの特異メソッドを定義します. > ですから,module_evalを使った時とinstance_evalを使った時と > ではdefによるメソッドの定義先が明らかに異なるわけですね. そうですね. ここまではOK. > 一方,どちらでもselfはそのクラスですから,同じpublicメソッ > ドが起動されます.Module#publicはそのモジュール(またはクラ > ス)のメソッド(特異メソッドではない)をpublicにしますから, > instance_evalを使った場合,(Exception2MessageMapperでは > failが定義されていないので,クラス階層を遡って)Object#fail > をpublicにします.module_evalを使った場合にはfailが > Exception2MessageMapperで定義されていますから,そのメソッ > ドをpublicにします. うーん. なるほどぅ... class << Exception2MessageMapper public :XX end が必要になるんですね... object.instance_eval ... と class << object って定義に関しては同じ動作 なのに, 変数のアクセスに関しては違ってくるんですね... >という説明でわかりますか? どもでした(__;;; # 勉強になりました. __ ................................石塚 圭樹@日本ラショナルソフトェア... ----------------------------------->> e-mail: keiju@bc.mbn.or.jp <<---