include og extend
Bland adfærd ind
include og extend er en gratis Ruby Academy-lektion på CoddyKit. Dette er lektion 2 af 4. Du kan læse alle 3 lektioner i dette læringsspor gratis i deres fulde længde — derefter låser CoddyKit PRO alle lektioner op samt praktiske øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Den er en del af læringsforløbet i Ruby Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Ruby Academy-kurset indeholder 4 lektioner i alt.
Blande adfærd ind
Modulernes egentlige styrke er et mixin: at dele metoder på tværs af klasser uden nedarvning. De to vigtigste værktøjer er include og 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 tilføjer instansmetoder
include blander et moduls metoder ind som instansmetoder. Alle objekter i klassen får dem.
module Sayable
def say(msg)
"#{msg}!"
end
end
class Dog
include Sayable
end
puts Dog.new.say("Woof")Genbrug på tværs af klasser
Et modul kan inkluderes af mange indbyrdes uafhængige klasser, så de deler adfærd uden en fælles overklasse.
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 tilføjer klassemetoder
extend blander et moduls metoder ind som klassemetoder (metoder på selve klasseobjektet).
module Findable
def find(id)
"Finding record #{id}"
end
end
class User
extend Findable
end
puts User.find(42)extend på et Object
Du kan bruge extend på et enkelt objekt, så kun det får metoderne, mens de andre forbliver uændrede.
module Admin
def privileges
"all access"
end
end
user = Object.new
user.extend(Admin)
puts user.privilegesinclude kontra extend
Husk forskellen:
include=> metoder bliver til instansmetoder.extend=> metoder bliver til klassemetoder eller metoder på enkeltobjekter.
module Helper
def help; "helping"; end
end
class A; include Helper; end
class B; extend Helper; end
puts A.new.help
puts B.helpModuler kan se værtsmetoder
En metode fra et mixin kører i værtsobjektets kontekst, så den kan kalde værtsobjektets egne metoder og tilgå dets data.
module Describable
def describe
"I am #{role}"
end
end
class Worker
include Describable
def role; "a worker"; end
end
puts Worker.new.describeHooket included
Definér self.included(base) for automatisk at køre kode, når et modul inkluderes. Et klassisk mønster tilføjer klassemetoder samtidig.
module Trackable
def self.included(base)
puts "Trackable added to #{base}"
end
end
class Order
include Trackable
endKontrollere medlemskab
is_a? og ancestors viser, at et inkluderet modul bliver en del af objektets typekæde.
module Flyable; end
class Bird; include Flyable; end
b = Bird.new
puts b.is_a?(Flyable)
p Bird.ancestorsKombinere flere mixins
En klasse kan inkludere flere moduler og sammensætte adfærd fra mange små, fokuserede dele.
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.runSæt det hele sammen
Mixins deler adfærd fleksibelt:
includetil instansmetoder.extendtil metoder på klasser eller enkeltobjekter.- Metoder fra mixins kører i værtsobjektets kontekst.
- Sammensæt mange små moduler.
module Greet
def hi; "hi from #{self.class}"; end
end
class Cat; include Greet; end
puts Cat.new.hiHurtigt tjek
Afprøv din forståelse af include og extend.
Opsamling
Du har lært om mixins:
include=> instansmetoder.extend=> metoder på klasser eller enkeltobjekter.- Metoder fra mixins kører i værtsobjektets kontekst.
- Hooket
includedudløses ved inkludering.
module Loud
def shout(s); s.upcase; end
end
class Speaker; include Loud; end
puts Speaker.new.shout("hello")Lær Ruby med en AI-underviser — gratis
Skriv og kør rigtig kode i din browser, få øjeblikkelig hjælp fra en AI-underviser døgnet rundt, og fortsæt, hvor du slap, på web eller i appen.
- Kurser
- 29
- Lektioner
- 109
Ofte stillede spørgsmål
Er lektionen “include og extend” gratis?
Ja — alle 3 lektioner i læringssporet Ruby Academy, inklusive “include og extend”, kan læses gratis i deres fulde længde her på webstedet. Derefter låser CoddyKit PRO alle lektioner op samt interaktive øvelser med en indbygget kodeeditor og en AI-underviser døgnet rundt. Ruby Academy-kurset indeholder 4 lektioner i alt.
Hvad lærer jeg i “include og extend”?
Bland adfærd ind Du øver dig i Ruby Academy med praktisk kode, som du kører direkte i browseren, og en AI-vejleder døgnet rundt besvarer dine spørgsmål, mens du arbejder dig gennem lektionen.
Skal jeg have erfaring for at begynde på Ruby Academy?
Der kræves ingen tidligere erfaring. Ruby Academy på CoddyKit er tilrettelagt for både begyndere og øvede, så du kan starte her eller fra begyndelsen og lære i dit eget tempo. Dette er lektion 2 af 4.
Hvor lang tid tager lektionen “include og extend”?
De fleste CoddyKit-lektioner tager cirka 5–10 minutter. Hver lektion er kort og interaktiv, så du gør løbende fremskridt og kan fortsætte, hvor du slap – på både web og app.
Kan jeg skrive og køre kode i denne Ruby Academy-lektion?
Ja. Alle Ruby Academy-lektioner har en indbygget kodeeditor, så du kan skrive og køre rigtig kode direkte i din browser og få øjeblikkelig feedback fra AI – uden lokal opsætning.