November 2012
Intermediate to advanced
888 pages
54h 46m
Polish
Chcemy usunąć definicję metody z klasy lub modułu.
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)) ...