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.