У меня есть этот рудиментарных примерметоды модуля Перекрытие класса из родительского класса
module TheirModule
class Klass
def self.do_something
KlassModule.klass_module_method()
end
module KlassModule
# Lots of other functionality
def self.klass_module_method
puts "Hello from TheirModule"
end
# Lots of other functionality
end
end
end
module MyModule
class Klass < TheirModule::Klass
module KlassModule
extend TheirModule::Klass::KlassModule
def self.klass_module_method
puts "Hello from MyModule"
end
end
end
end
Тогда называя это дает мне неожиданные результаты.
MyModule::Klass.do_something # Hello from TheirModule
Я ожидаю, что MyModule::Klass
«s KlassModule
будет переопределить klass_module_method
первоначально определенный в TheirModule::Klass
» s KlassModule
как это ...
MyModule::Klass.do_something # Hello from MyModule
это явно не тот случай, и мне интересно ...
- Почему это не работает?
- Что было бы рубиновым способом для этого?
EDIT: Одно предостережение в том, что я не могу изменить источник TheirModule
Кому следует переопределять какие? Это много запутанных имен. –
@SergioTulentsev 'MyModule :: Klass.klass_module_method' должен переопределить' Ихмодуль :: Klass.klass_module_method' ... Или, по крайней мере, это то, что я намереваюсь сделать. – jondavidjohn