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.
 
<sourcesyntaxhighlight lang="ruby">
module Brzeczyk
def dzwon
Linia 65:
b.podaj_czas #=> Sun Aug 05 17:24:08 +0200 2007
b.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</syntaxhighlight>
</source>
 
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.
 
<sourcesyntaxhighlight lang="ruby">
zegarek = Czasomierz.new
zegarek.extend(Brzeczyk)
zegarek.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</syntaxhighlight>
</source>
 
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]].
 
<sourcesyntaxhighlight lang="ruby">
class Buczek
extend Brzeczyk
Linia 83:
 
Buczek.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</syntaxhighlight>
</source>
 
<noinclude>{{Przypisy}}