9.9. Automatyczne inicjowanie modułów-domieszek
Podziękowania dla Phila Thomsona
Problem
Chcemy wykonywać metodę initialize
w module dołączanym do klasy każdorazowo, gdy tworzony jest obiekt tej klasy. Nie chcemy jednak obciążać użytkownika modułu obowiązkiem wykonywania instrukcji super
w metodzie initialize
.
Rozwiązanie
Po pierwsze, musimy wyposażyć klasę w możliwość śledzenia dołączanych do niej modułów, Po drugie, musimy przedefiniować konstruktor Class#new
tak, by dla każdego z tych modułów wywołana została jego (modułu) własna metoda initialize
. Elastyczność języka Ruby pozwala nam na modyfikację wbudowanej klasy Class
(choć nigdy nie należy robić tego pochopnie):
class Class def included_modules @included_modules ||= [] end ...
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.