[ruby-list:47944] Re: 特異クラス、特異メソッド
From:
鈴木 亮太 <suzuki@...>
Date:
2011-03-09 14:51:13 UTC
List:
ruby-list #47944
ROMってました。鈴木と申します。 最初から特異クラスが存在すると、 特異クラスもオブジェクトですから、特異クラスの特異クラスが存在するわけで、 そのまた特異クラスの特異クラスの・・・・ とメモリがなくなるまで無限ループに陥ることになるので、特異クラスは必要になったら作るという仕様なのではないでしょうか。 >> つまり、クラスをインスタンス化した段階で、すでに >> >> class << self >> end >> >> を自動的に持っているというイメージなのでしょうか? > > 私も昔は 「最初から特異クラスが存在するのかな」 と思っていたのですが、 > そうではないようです。 Ruby 処理系の実装に詳しいわけではないので > 自分で調べたわけではないんですが。。 > > 前のメールに書いた記事中 [1] に > 『class << obj; end > > この式の意味するところは、 > - objの特異クラスの定義を開始する > - objが特異クラスを持っていなければ(普通のクラスに直接属しているなら)、新たに特異クラスを作成する > だ。 > > 従って、それまで独自の特異クラスを持っていなかったオブジェクトも特異クラスを持ってしまう。』 > と書いてあるので、 > 「特異クラスを取得する構文が使用されたとき、まだ特異クラスが > 存在しないならば自動的に作られる」 > という感じだと思います。 > > [1] http://yugui.jp/articles/768#label-7 > > -- > 信岡 ゆう (NOBUOKA Yu) > http://www.vividcode.info/ > -- 鈴木亮太 (Suzuki Ryota) E-mail : suzuki@galileoscope.com