けいじゅ@SHLジャパンです. 

In [ruby-list :02677 ] the message: "[ruby-list:2677] Re: [Req] alias
for singltone method ", on Apr/08 13:29(JST) matz / caelum.co.jp
(Yukihiro Matsumoto) writes:

あまりにもリプライが遅いので忘れ去られているかと思いました(^^;;;

>今回,(また)大幅な変更の提案をします.

おお. version 1.1 の登場か(^^;;; 

>いろいろ考えてみました.現在,クラス/モジュールに対して行う
>事のできる操作は
>
>  (1) メソッド定義
>  (2) undef
>  (3) alias
>  (4) private/public
>  (5) module_function
>  (6) attr
>
>です.一方オブジェクト単位では1は特異メソッド定義,4は今回の
>make_method_{private,public}でできるようになりました.

そうですね.

>残りの操作も行いたいというニーズは理解できます.しかし,なん
>かこうやってちまちまと追加して行くのはどうも面白くありません.

# どっかのオブジェクト指向データベースの MOP見たくなりますものねえ...

>んで,いっそのこと今まで避けて来た特異クラスを表に出してしま
>おうと思います.

ここまでしちゃいますか...

>具体的には以下のような構文を導入します.
>
>  class << obj
>    ...
>  end
>
>この文の範囲内での操作は,objで指定したオブジェクトにだけ反
>映されます.ですから,上の1〜6までの全ての操作を行う事ができ
>るようになります.この構文で操作されるクラスは「単一のオブジェ
>クトに対応する仮想的なクラスである」とします.

現在:

obj.extend {...}

がありますが, 機能的には同じものになるんですよね?

>これと同時にObjectクラスからmake_method_{private,public}を取
>り除いて,Moduleクラスに{private,public}_class_methodを追加
>しようと思います(機能は同じ).

これなんで必要になるんですか?

module Foo
  def Foo.foo
    ...
  end
  def initialize
    ...
  end
end

として

class << Foo
  private :foo
end

などで十分な気がしますが?? 何か書くのが厄介というのはありますね. いっ
そのこと以下のように書けばいいんですね?

module Foo
  def initialize
    ...
  end
end

class << Foo
  def foo
    ...
  end
  private :foo
end

>どうでしょう?

現在私がやっていることに関しては, 大部楽になるのは事実です.

が, ここまで方向転換して, 特異クラスを表に出しちゃっていいんですか? と
いうのがちょっと気にならないでもないです. まあ, 松本氏が十分に考えたと
いうのですから問題ないと思いますが... 

__
..........................................石塚 圭樹@SHLジャパン(株)...
------------->アドレス変わりました!! e-mail: keiju / shljapan.co.jp <----