[ruby-list:50867] Re: __id__ メソッドでの super について
From:
Akret Node <node.akret@...>
Date:
2020-01-01 08:36:22 UTC
List:
ruby-list #50867
ささださん
お返事ありがたいです。
BasicObject クラスは Class クラスのインスタンスであるから呼び出せるということでしょうか?
super は原則、親クラスにある同名のメソッドを呼び出しますが、この場合は例外的に呼び出せるということでしょうか
次のプログラムを作ってみたのですが、期待通り5が表示されました。
class Class
def sample
5
end
end
class String
def self.sample
super
end
end
p String.sample #=> 5
2020年1月1日(水) 15:00 Koichi Sasada <ko1@atdot.net>:
>
> ささだです。
>
> BasicObject クラスに対する __id__ を呼んでいるためです。
>
> p BasicObject.__id__
> #=> 60
>
> p BasicObject.method(:__id__)
> #=> #<Method: BasicObject.__id__() t.rb:2>
>
> p BasicObject.method(:__id__).super_method
> #=> #<Method: BasicObject#__id__()>
>
> class BasicObject
> def __id__
> super
> end
> end
>
> p BasicObject.__id__
> #=> t.rb:18:in `__id__': super: no superclass method `__id__' for
> BasicObject:Class (NoMethodError)
>
> On 2020/01/01 3:10, Akret Node wrote:
> > のぐちです。
> >
> > あけましておめでとうございます。
> >
> > class BasicObject
> > def self.__id__
> > super
> > end
> > end
> >
> > p BasicObject.__id__ #=> 47444468263960
> >
> > BasicObject には親クラスがないはずですが self.__id__ の中で super
> > を読んでみると正しくオブジェクトIDが取得できているようです。これはどのような理屈で取得できているのでしょうか?
> >
> > 親クラスに同名のメソッドがなければ、「no superclass method `xxx' for 'yyy'」と例外になるはずですが、上記ではなりません。。。
> >
>
> --
> // SASADA Koichi at atdot dot net