eigenclass

id:taigouさんとの話で「特異クラス」という単語が出てきていますが、yuguiさんの説明によるとこんな感じ。

特異クラス
特定のオブジェクトだけ、他の同輩たちには無い特別なメソッドを持たせたいと思ったらどうするだろう。特異メソッドとは要するにそういうものだ。

C++だったら、特別なメソッドを持った子クラスを作ってSingletonパターンを適用するというやりかたが選択肢に挙がるだろうなと思う。Rubyの特異クラスとはそれ、そのものだ。

すばらしく分かりやすい説明。なぜsingletonという言葉が使われているのかもイメージしやすい。


でも、残念ながら特異クラスをオブジェクトから取得する方法は現時点ではないようです*1。ということはirbで直接調べられないので、この前の話では特異クラスを敢えて使わないようにしました。

そういうメソッドがあっても良いのなーと思ってたんですが、調べてみたらもう2年くらい前にRubikitchさんとまつもとさんでそういう話をされてました。

まつもと ゆきひろです

In message "Re: [ruby-dev:34191] Object#singleton_class"
on Tue, 1 Apr 2008 00:25:41 +0900, rubikitch / ruby-lang.org writes:

そろそろ特異クラスを得るメソッドを導入しても良いのではないでしょうか?
毎回「(class << x; self; end)」と書くのは美しくないですから。
名前はそのまま「Object#singleton_class」がいいと思います。
そして別名「Object#eigenclass」、「Object#metaclass」も欲しいです。

気持ちは分かりますが、名前の合意ができるまでは導入しません。

* singleton_class→singletonパターンに登場するクラス、とく
に標準添付のsingleton.rbで定義されているSingletonクラス
トの混同がうれしくない

* metaclas→メタクラスとは伝統的に「クラスのクラス」を意味
するが、Rubyでは特異クラスはもっと広い

* eigenclass→これが一番害が少ないが、意味が分かる人は少数
派すぎる気がする

というわけで、ruby-talkを含めて啓蒙活動が必要かもしれません。

eigenclass って単語を知らんかったっす。啓蒙されましたw
個人的には、使ってればsingleton_classとsingletonパターンを混同しないような気がするのでsingleton_classでも問題ないと思うんですが、より適した言葉があるならそっちの方が良いっすね。

*1:引用したメールの中でrubikitchさんが書いているやり方で宣言時に取得することはできる