include e extend
Includere comportamenti
include e extend è una lezione Ruby Academy gratuita su CoddyKit. Questa è la lezione 2 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Ruby Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Ruby Academy include 4 lezioni in totale.
Condividere il comportamento tramite mixin
Il vero potere dei moduli è il mixin: condividere metodi tra classi senza usare l'ereditarietà. I due strumenti principali sono include e 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 aggiunge metodi di istanza
include inserisce i metodi di un modulo come metodi di istanza. Ogni oggetto della classe li acquisisce.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")Riutilizzare tra classi
Lo stesso modulo può essere incluso da molte classi non correlate, condividendo il comportamento senza un genitore comune.
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 aggiunge metodi di classe
extend inserisce i metodi di un modulo come metodi di classe (metodi direttamente sull'oggetto classe).
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)extend su un oggetto
È possibile usare extend su un singolo oggetto, in modo che solo quello acquisisca i metodi, lasciando invariati gli altri.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude e extend
Ricordi la distinzione:
include=> i metodi diventano metodi di istanza.extend=> i metodi diventano metodi di classe/oggetto.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpI moduli vedono i metodi dell'oggetto ospitante
Un metodo incluso viene eseguito nel contesto dell'oggetto ospitante, quindi può chiamare i metodi dell'oggetto e accedere ai suoi dati.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeL'hook included
Definisca self.included(base) per eseguire automaticamente del codice quando un modulo viene incluso. Un modello classico aggiunge contemporaneamente i metodi di classe.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endVerificare l'appartenenza
is_a? e ancestors mostrano che un modulo incluso diventa parte della catena dei tipi dell'oggetto.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsCombinare più mixin
Una classe può includere più moduli, componendo il comportamento a partire da molti elementi piccoli e mirati.
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.runMettere tutto insieme
I mixin condividono il comportamento in modo flessibile:
includeper i metodi di istanza.extendper i metodi di classe o di un singolo oggetto.- I metodi inclusi vengono eseguiti nel contesto dell'oggetto ospitante.
- È possibile comporre molti moduli piccoli.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiVerifica rapida
Verifichi la comprensione di include e extend.
Riepilogo
Ha imparato a usare i mixin:
include=> metodi di istanza.extend=> metodi di classe o di un singolo oggetto.- I metodi inclusi vengono eseguiti nel contesto dell'oggetto ospitante.
- L'hook
includedviene eseguito durante l'inclusione.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")Domande Frequenti
La lezione «include e extend» è gratuita?
Sì — il testo completo di «include e extend» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Ruby Academy, passa a CoddyKit PRO. Il corso Ruby Academy include 4 lezioni in totale.
Cosa imparerò in «include e extend»?
Includere comportamenti Eserciti Ruby Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.
Ho bisogno di esperienza per iniziare Ruby Academy?
Non è richiesta alcuna esperienza precedente. Ruby Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 2 di 4.
Quanto tempo richiede la lezione «include e extend»?
La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.
Posso scrivere ed eseguire codice in questa lezione Ruby Academy?
Sì. Ogni lezione Ruby Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.