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)