7

それにかんする:

class Test
  class << self
    def hi
      puts "Hi there"
    end
end

頭の中で次のイメージを思いつきました。

Ruby ではすべてがオブジェクトなので、クラス自体は class のオブジェクトですClass。呼び出すことで、内部から定義class << selfを開き、いくつかのインスタンス メソッドを注入します。は のインスタンスであるため、オブジェクトのインスタンス メソッドを呼び出すのと同じ方法でこれらのメソッドを呼び出すことができます: .ClassTestTestClassTest.hi

以下は、前の文を視覚化するのに役立つ疑似コードです。

class Class
    def hi
        puts “Hi there”
    end
end

Test = Class.new(class Test
end)
Test.hi

私はこれを正しく理解していますか?

4

1 に答える 1

4

objclassのオブジェクトがあるとしますA。この時点で、objのクラスの祖先階層は次のとおりです。

[A, ...]

つまり、唯一のインスタンスが でclass << obj; ... endあるクラスを作成し、それを の祖先階層に配置して、のクラスの祖先階層が次のようになるようにします。Bobjobjobj

[B, A, ...]

class << self; ... endのコンテキスト内で記述する場合Test、その本体は唯一のインスタンスが であるクラスになりますTest。その本体内でインスタンス メソッドを定義するhiと、それはそのクラスのインスタンスに適用されますTest。したがって、できるようになりますTest.hi

于 2013-02-17T20:18:47.187 に答える