まつもと ゆきひろです.

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が使えるようにするための
モジュール」です.
                                まつもと ゆきひろ /:|)