include i extend
Dodawanie zachowania przez mixiny
include i extend to bezpłatna lekcja Ruby Academy na CoddyKit. To lekcja 2 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Ruby Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Ruby Academy zawiera 4 lekcji w sumie.
Współdzielenie zachowania za pomocą miksinów
Prawdziwa siła modułów tkwi w miksinie: udostępnianiu metod wielu klasom bez dziedziczenia. Dwa główne narzędzia to include i extend.
module Walkable
def walk
"#{name} is walking"
end
end
class Person
include Walkable
attr_reader :name
def initialize(name)
@name = name
end
end
puts Person.new("Ada").walkinclude dodaje metody instancji
include dołącza metody modułu jako metody instancji. Każdy obiekt danej klasy je otrzymuje.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")Ponowne użycie w wielu klasach
Jeden moduł może zostać dołączony do wielu niezwiązanych ze sobą klas, umożliwiając współdzielenie zachowania bez wspólnego rodzica.
module Timestamped
def stamp
"created"
end
end
class Post; include Timestamped; end
class Comment; include Timestamped; end
puts Post.new.stamp
puts Comment.new.stampextend dodaje metody klasowe
extend dołącza metody modułu jako metody klasowe (metody samego obiektu klasy).
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)extend na obiekcie
Można użyć extend dla pojedynczego obiektu, aby tylko on otrzymał te metody, bez modyfikowania pozostałych obiektów.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude a extend
Należy pamiętać o różnicy:
include=> metody stają się metodami instancji.extend=> metody stają się metodami klasy/obiektu.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpModuły widzą metody obiektu gospodarza
Metoda z dołączonego modułu działa w kontekście obiektu gospodarza, dlatego może wywoływać jego własne metody i uzyskiwać dostęp do jego danych.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeHak included
Zdefiniuj self.included(base), aby kod wykonywał się automatycznie po dołączeniu modułu. Klasyczny wzorzec polega na jednoczesnym dodaniu metod klasowych.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endSprawdzanie przynależności
is_a? i ancestors pokazują, że dołączony moduł staje się częścią łańcucha typów obiektu.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsŁączenie wielu miksinów
Klasa może dołączać wiele modułów, tworząc zachowanie złożone z wielu małych, wyspecjalizowanych elementów.
module Swimmable; def swim; "swimming"; end; end
module Runnable; def run; "running"; end; end
class Athlete
include Swimmable
include Runnable
end
a = Athlete.new
puts a.swim
puts a.runSkładanie wszystkiego w całość
Miksiny pozwalają elastycznie współdzielić zachowanie:
includesłuży do metod instancji.extendsłuży do metod klasy lub pojedynczego obiektu.- Metody z miksinów działają w kontekście obiektu gospodarza.
- Można łączyć wiele małych modułów.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiSzybki test
Proszę sprawdzić swoją znajomość include i extend.
Podsumowanie
Omówiono miksiny:
include=> metody instancji.extend=> metody klasy lub pojedynczego obiektu.- Metody z miksinów działają w kontekście obiektu gospodarza.
- Hak
includedjest uruchamiany podczas dołączania modułu.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")Często zadawane pytania
Czy lekcja „include i extend” jest bezpłatna?
Tak — pełny tekst „include i extend” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Ruby Academy, przejdź na CoddyKit PRO. Kurs Ruby Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „include i extend”?
Dodawanie zachowania przez mixiny Ćwiczysz Ruby Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Ruby Academy?
Nie wymagamy żadnego doświadczenia. Ruby Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 2 z 4.
Ile czasu zajmuje lekcja „include i extend”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Ruby Academy?
Tak. Każda lekcja Ruby Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.