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.