Ruby/Moduły: Różnice pomiędzy wersjami

Usunięta treść Dodana treść
Szymon wro (dyskusja | edycje)
Szymon wro (dyskusja | edycje)
Linia 67:
</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.
 
<source lang="ruby">
zegarek = Czasomierz.new
zegarek.extend(Brzeczyk)
zegarek.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</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 klasy niestatyczne z modułów przekazanych do metody <tt>extend</tt> zostaną włączone do klasy (lub modułu) jako metody klasowe (''statyczne'').
 
<source lang="ruby">
class Buczek
extend Brzeczyk
end
 
Buczek.dzwon #=> BZZZZ!BZZZZ!BZZZZ!
</source>
<noinclude>
{{Przypisy}}