我有这个代码:
class A
def print
puts CONSTANT
end
end
module B
CONSTANT = "Don't Panic!"
end
假设a
是 A 类的一个实例。
所以我需要一个CONSTANT
应该可以找到的定义a.print
。
我考虑将模块包含B
到a
的单例类中,例如:
a.singleton_class.send :include, B
a.print # error: CONSTANT isn't found
我认为现在调用该方法应该没问题,但实际上不是。
应该成功导入常量,因为以下代码按预期工作:
a.singleton_class.constants # => [.., :CONSTANT, ..]
但是,通过将常量包含在类中而不是单例类中,它可以工作:
a.class.send :include, B
a.print # prints: Don't Panic!
我认为我不能引用在单例类中定义的常量很奇怪。如果这是合理的,我想知道为什么。
提前致谢。