Ruby:获取子类常量的访问权限

时间:2012-12-30 03:59:05

标签: ruby constants subclass class-method

为什么以下不起作用?

class Foo
    def self.keyletters
        self::KEYLETTERS
    end
end

class Baz < Foo
    KEYLETTERS = "US"
end

puts Foo.keyletters

我已经看到类似问题的问题(例如:Have a parent class's method access the subclass's constants),但在我的情况下,Foo.keyletters是一个类方法,而不是实例方法。我正在

uninitialized constant Foo::KEYLETTERS (NameError)

1 个答案:

答案 0 :(得分:3)

当课程A继承课程B或包含/ extends模块C时,A会获得BC所拥有的内容除了它自己的常量,变量和方法。 BC不受此影响。

在您的情况下,BazFoo的子类。因此Baz除了Foo之外还有Baz::KEYLETTERS所拥有的内容。 Foo除此之外没有任何内容。特别是,没有Foo::KEYLETTERS