给出这段代码:
class A
CONST = 'A'
def initialize
puts CONST
end
end
class B < A
CONST = 'B'
end
A.new # => 'A'
B.new # => 'A'
我希望B
使用CONST = 'B'
定义,但我不知道如何。有什么想法吗?
问候
汤姆
答案 0 :(得分:73)
class A
CONST = 'A'
def initialize
puts self.class::CONST
end
end
class B < A
CONST = 'B'
end
A.new # => 'A'
B.new # => 'B'
答案 1 :(得分:2)
我对Konstantin Haase的解决方案有一些问题。在继承类的实例化对象中访问常量时,使用了父常量。
我必须明确地引用该课程。
self.class::CONST
欢呼声
答案 2 :(得分:2)
很抱歉,我无法将代码格式设置为仅在“回答”中的“评论”中工作,但这是对akostadinov向Hendrik提出的问题的回应“这与他的[康斯坦丁]答案有何不同?”
我猜Hendrik试图从他的继承类&amp;中的方法中访问常量。这取决于它是实例还是静态方法。它看起来像你在实例方法中所期望的那样。但也许或许不是你对静态方法的期望。即使这不是亨德里克的意思,这也许值得注意:
如果你有确切的类定义为Konstantin,但你像这样在A类中添加一个方法:
def self.print_const
puts CONST
end
然后你得到A两次:
A.print_const # prints A
B.print_const # prints A
但是,如果您通过引用类来定义A中的方法:
def self.print_const
puts self::CONST
end
然后你得到:
A.print_const # prints A
B.print_const # prints B
答案 3 :(得分:1)
如果有人发现这个并且正在使用模块扩展名,请使用
self::CONST