シングルトンがどのように機能するかを理解しようとする実験を行いました。
クラス変数の前に @ ではなく @@ を付ける理由がわかりません。以下で参照されているように、変数がクラス定義とインラインで作成されている場合、self は Test として定義されており、変数はクラス変数ですよね? その後、シングルトン クラス定義で attr_accessor を使用してアクセスできます。初期化の @var は、初期化時に self がコンテキストで t に設定されているため、異なるように見えます。したがって、var はそのコンテキストで t に属しますか?
これはすべて非常に紛らわしいので、助けていただければ幸いです。
class Test
@var = 99
attr_accessor :var
def initialize
@var = "Whoop" #if this is commented, pri doesn't print anything.
end
def pri
puts @var
end
class << self
attr_accessor :var
end
end
t = Test.new
puts Test.var # Outputs 99
Test.var = 5
puts Test.var # Outputs 5
puts t.pri # Outputs Whoop