次に例を示します(ActiveRecordを考えてください)。
class Base
def connect(connection)
@@connection = connection
end
def connection
@@connection
end
end
class User < Base
end
class SuperUser < User
end
Base.new.connect("A connection")
puts User.new.connection #=> A connection
puts SuperUser.new.connection #=> A connection
ここでの秘訣は、クラス変数がインスタンスメソッドからアクセス可能であり、継承されることです。これを試して:
class Base
def self.connect(connection)
@connection = connection
end
def self.connection
@connection
end
def connection
self.class.connection
end
end
class User < Base
end
Base.connect("A connection")
puts User.new.connection #=> nil
(クラスから)独自のクラスインスタンス変数にアクセスしようとすると、継承されませnil
ん。self.connection
User
追加:はい、誤用すると危険な場合があります:
@@a = "A"
class A
def self.a
@@a
end
def a
@@a
end
end
puts A.a #=> A
puts A.new.a #=> A