我一直在搞乱Ruby中的单例类,我遇到了一些我不理解的行为。
class A
def self.inherited(subclass)
class << subclass
@@a = 5
def a
@@a
end
def a=(value)
@@a = value
end
end
end
end
class B < A
end
class C < A
end
B.a # => 5
C.a # => 5
B.a= 7
C.a # => 7
ruby不应该为B和C创建不同的单例类吗?为什么B和C共享同一个匿名类?
答案 0 :(得分:1)
他们没有共享同一个单身人士类。
B.singleton_class
# => #<Class:B>
C.singleton_class
# => #<Class:C>
但是单例类都是A
的单例类的子类。
B.singleton_class.ancestors
# => [
#<Class:B>,
#<Class:A>,
#<Class:Object>,
#<Class:BasicObject>,
Class,
Module,
Object,
Kernel,
BasicObject
]
C.singleton_class.ancestors
# => [
#<Class:C>,
#<Class:A>,
#<Class:Object>,
#<Class:BasicObject>,
Class,
Module,
Object,
Kernel,
BasicObject
]