まつもと ゆきひろです.
In message "[ruby-list:2040] Re: [Req] no-name module (Re: [Request] static var?)"
on 97/02/04, sinara / blade.nagaokaut.ac.jp <sinara / blade.nagaokaut.ac.jp> writes:
|
|原です。
|
|> |(4)無名のモジュール
|
|> ちょうどextendに手を入れていたところでもあ
|> るし,実装は全然むずかしくないので,undocumented featureとし
|> て追加してみましょう.なお,この仕様は予告なく削除されること
|> があります.
|
|おー!ありがとうございます。
foo.extend do
def bar()
..
end
end
のように使ってください.
| 特定のオブジェクトに「複数」のメッソッドをそのオブジェクトを
| レシーバとして「その場で」定義する。
|
|という事が出来てもいいじゃないかと思いました。まあ、特異メソッ
|ド並べればいいわけではありますが。^^;
疑問を感じる理由は以下の通りです.
* 特異メソッド定義を並べるのといろんな意味でほとんど大差な
いのではないか.
* そもそも特異メソッドにはメソッドを追加するという性質上,
衝突などがつきまとい,気軽に追加できない場合がある.より
静的な現在程度の方が無難では
まあ,作ってからいっても説得力ないですけど.
|と書くぐらいなら(そして Foo を再利用しないなら)、もともと
|
|class C
| def foo() ... end
|end
|
|とかけるじゃないか?という意味でしょうか。そうでなかったら
|以下の説明は意味ないですが(かなりくどいかもしれませんけど)
そういう意味です.論旨は分からないでもないですけど,やはりこ
こは「fooという性質を追加するのだ」ということで「fooという性
質を表現する形容詞」を名前に持つModuleを定義して欲しいと思い
ます.
|#ここまで書いてさっき話題になったクラス Kernel の存在意義
|#とかモジュール化の話と関連があることに気づきました。
関連はあるでしょうね.ちなみにKernelは「本来Objectの性質なん
だが,トップレベルでの再定義でsuperが使えるようにするための
モジュール」です.
まつもと ゆきひろ /:|)