Ruby では通常のクラスオブジェクトは Class
のインスタンスでもあり、かつ Class
は Object
のサブクラスです。つまり MyClass.is_a?(Object) == true
になります。
よって MyClass
クラスオブジェクトは Object
から継承した puts
インスタンスメソッドを持っています。 MyClass
のクラスメソッド内における self.puts
はこのインスタンスメソッドの呼び出しになります。
Object
の任意のインスタンスメソッドが MyClass
のクラスメソッド内で呼べることは以下のコードで確認できます。
class Object
def my_method
'ok'
end
end
class MyClass
def self.my_class_method
my_method
end
end
puts MyClass.my_class_method # => ok
# 余談だがこういうことである
puts MyClass.my_method # => ok
puts MyClass.new.my_method # => ok