В Ruby существует способ "переопределить" константу в подклассе таким образом, что вызов унаследованного метода из подкласса приводит к этому методу с использованием новой константы вместо старой? Например:
class SuperClass
CONST = "Hello, world!"
def self.say_hello
CONST
end
end
class SubClass < SuperClass
override_const :CONST, "Hello, Bob!"
end
SuperClass.say_hello # => "Hello, world!"
SubClass.say_hello # => "Hello, Bob!"
Если нет, возможно, есть способ сделать что-то подобное?
class SuperClass
CONST = "Hello, world!"
def self.say_hello
CONST
end
end
SubClass = SuperClass.clone
SubClass.send(:remove_const, :CONST)
SubClass.const_set(:CONST, "Hello, Bob!")
SubClass.say_hello # => "Hello, Bob!"
Примечание. Я попытался выполнить второй пример в irb и, похоже, работает, за исключением того, что методы класса не могут получить доступ к CONST после того, как я клонировал класс:
irb(main):012:0> SubClass.say_hello
NameError: uninitialized constant Class::CONST
from (irb):4:in `say_hello'
from (irb):12
from C:/Ruby193/bin/irb:12:in `<main>'