[ruby-list:50866] Re: __id__ メソッドでの super について

From: Koichi Sasada <ko1@...>
Date: 2020-01-01 06:00:48 UTC
List: ruby-list #50866
ささだです。

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

In This Thread