Ruby/Moduły: Różnice pomiędzy wersjami
Usunięta treść Dodana treść
m Update syntaxhighlight tags - remove use of deprecated <source> tags |
|||
Linia 45:
Zrealizujmy nasz przykład z zegarkami.
<
module Brzeczyk
def dzwon
Linia 65:
b.podaj_czas #=> Sun Aug 05 17:24:08 +0200 2007
b.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</syntaxhighlight>
Jak widzimy, <tt>Budzik</tt> dziedziczy po klasie <tt>Czasomierz</tt> oraz zawiera metody (akurat tylko jedną) z modułu <tt>Brzeczyk</tt>. Dzieje się tak dzięki wspomnianej już metodzie <tt>include</tt>. A co, jeśli chcielibyśmy dodać brzęczyk do jednego tylko obiektu danej klasy? W tym celu możemy użyć metody <tt>extend(module)</tt> która dodaje metody modułu do konkretnego obiektu.
<
zegarek = Czasomierz.new
zegarek.extend(Brzeczyk)
zegarek.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</syntaxhighlight>
Metoda <tt>extend</tt> może być również używana tak jak <tt>include</tt>, jednak jej działanie jest nieco inne. Otóż wszystkie metody niestatyczne z modułów przekazanych do <tt>extend</tt> zostaną włączone do klasy (lub modułu) jako metody klasowe (''statyczne''). O metodach klasowych powiemy jeszcze przy okazji omawiania [[Ruby/Zmienne klasowe|zmiennych klasowych]].
<
class Buczek
extend Brzeczyk
Linia 83:
Buczek.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</syntaxhighlight>
<noinclude>{{Przypisy}}
|