10.13. Anulowanie definicji metody
Problem
Chcemy usunąć definicję metody z klasy lub modułu.
Rozwiązanie
Wywołanie metody Module#remove_method
wewnątrz klasy lub modułu spowoduje usunięcie implementacji wskazanej metody z tej klasy (modułu), co wymusi delegowanie wywołań usuniętej metody do superklasy lub modułu włączanego przez klasę.
W poniższym przykładzie stworzono subklasę klasy Array
i w subklasie tej przedefiniowano (zapewne dla zabawy) metody <<
i []
tak, by zwracały one wartości cokolwiek losowe. Po pewnym czasie autor pomysłu postanowił przywrócić prawidłowe funkcjonowanie metody []
, pozostawiając jednak dziwaczne funkcjonowanie metody <<
.
class RandomizingArray < Array def <<(e) insert(rand(size), e) end def [](i) super(rand(size)) ...
Get Ruby. Receptury now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.