Ruby:访问子类常量
为什么下面的方法不起作用Ruby:访问子类常量,ruby,constants,subclass,class-method,Ruby,Constants,Subclass,Class Method,为什么下面的方法不起作用 class Foo def self.keyletters self::KEYLETTERS end end class Baz < Foo KEYLETTERS = "US" end puts Foo.keyletters 当类A继承类B或包含/扩展模块C时,A除了自身的常量、变量和方法之外,还获取B和C拥有的任何内容B和C不受此影响 在您的例子中,Baz是Foo的一个子类。因此,Baz除了Baz::KEYLETTE
class Foo
def self.keyletters
self::KEYLETTERS
end
end
class Baz < Foo
KEYLETTERS = "US"
end
puts Foo.keyletters
当类
A
继承类B
或包含/扩展模块C
时,A
除了自身的常量、变量和方法之外,还获取B
和C
拥有的任何内容<代码>B和C
不受此影响
在您的例子中,
Baz
是Foo
的一个子类。因此,Baz
除了Baz::KEYLETTERS
之外,还有Foo
所拥有的一切Foo
没有任何附加内容。特别是,这里没有Foo::KEYLETTERS
,但是你如何解释问题中的链接所说的行为呢?我不认为这是真的。在这里查看这篇文章:,在这篇文章中,动物可以“放置self.class::NOISE”,而不必声明NOISE本身(参见Phrogz的答案,第二个代码块)。此外,模块还可以访问它们所包含的类的实例变量;所以我认为你的说法对模块也不正确。LPD,McCrassy你把接收器搞糊涂了。仔细看。在这些情况下,构造函数应用于狗
,而不是动物
<代码>狗拥有所有额外的东西<代码>动物没有。
uninitialized constant Foo::KEYLETTERS (NameError)