powiedzmy mam następujące 2 klasy:Wykrywanie że metoda nie została przesłonięta
class A
def a_method
end
end
class B < A
end
jest to możliwe do wykrycia od wewnątrz (wystąpienie) klasy B, że metoda a_method
jest tylko zdefiniowane w nadklasą, a zatem nie jest przesłonięta w B?
Aktualizacja: rozwiązanie
Chociaż mam zaznaczone odpowiedź Chuck jako „zaakceptowany”, później Paolo Perrota uświadomiły mi, że rozwiązanie może pozornie być prostsze, a to prawdopodobnie będzie działać z wcześniejszymi wersjami Ruby też.
Wykrywanie jeśli „a_method” zostaje zastąpione w B:
B.instance_methods(false).include?("a_method")
A dla metod klasy używamy singleton_methods
podobnie:
B.singleton_methods(false).include?("a_class_method")
Bardzo fajne, dzięki! Szczególnie szczęśliwy po obejrzeniu wersji Ruby, którą pierwotnie wspomniano, zejście z wersji 1.9 na 1.8.7 (której aktualnie używam). – mxgrn
Tak, byłem trochę nieostry. Na początku myślałem, że działa z 1.8.7, a następnie zobaczyłem, że "właściciel metody nr" nie był w dokumentach 1.8.7 ri, więc zmieniłem go na 1.9, a następnie faktycznie sprawdziłem, czy metoda istnieje w wersji 1.8.7 i zobaczyła że miałem to prawo za pierwszym razem. Cieszę się, że to pomaga. – Chuck