Lua Academy · Lektion

Mixin-sammensætning og interfacekontrol

Sammensæt flere funktionalitetstabeller, og kontrollér, at de overholder interfacet.

Lektion 3 af 413 trin

Mixin-sammensætning og interfacekontrol er en gratis Lua Academy-lektion på CoddyKit. Dette er lektion 3 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 Lua Academy, og dine fremskridt synkroniseres på tværs af nettet og CoddyKit-appen. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad er mixins?

Mixins er tabeller med metoder, der kopieres ind i en klasse. De leverer funktionalitet uden at kræve en arverelation — perfekt til tværgående bekymringer.

Anvendelse af et simpelt mixin

Kopiér metoder fra en mixin-tabel ind i målklassen.

local Serializable = {
  serialize = function(self)
    local parts = {}
    for k, v in pairs(self) do
      parts[#parts+1] = k .. "=" .. tostring(v)
    end
    return "{" .. table.concat(parts, ", ") .. "}"
  end
}
local function mixin(cls, ...)
  for _, m in ipairs({...}) do
    for k, v in pairs(m) do
      if cls[k] == nil then cls[k] = v end
    end
  end
end
mixin(Animal, Serializable)
print(cat:serialize())

Overskrivning kontra ingen overskrivning

Decide whether mixins should overwrite existing methods. The example above uses if cls[k] == nil to prevent overwriting. Remove the check to allow overwriting.

Flere mixins

Anvend flere mixins på én klasse for at sammensætte funktionalitet fra mange kilder.

local Printable = { print = function(self) print(tostring(self)) end }
local Comparable = { eq = function(self, other) return self.id == other.id end }
mixin(User, Serializable, Printable, Comparable)

Definition af grænseflade

En grænseflade er en tabel, der angiver navnene på de påkrævede metoder. Brug den til at dokumentere den kontrakt, en klasse skal opfylde.

local IAnimal = {
  "speak",
  "move",
  "eat",
}

Funktion til kontrol af grænseflade

Kontrollér, at en klasse implementerer alle metoder i en grænseflade.

local function implements(cls, interface)
  for _, method in ipairs(interface) do
    if type(cls[method]) ~= "function" then
      return false, "Missing method: " .. method
    end
  end
  return true
end
local ok, err = implements(Dog, IAnimal)
print(ok, err)

Streng håndhævelse af grænseflader

Kald implements på tidspunktet for klassedefinitionen (eller ved indlæsning af modulet) for at opdage manglende metoder tidligt.

assert(implements(Dog, IAnimal))

Duck typing kontra grænsefladekontrol

Lua bruger naturligt duck typing (hvis objektet har metoden, bruger du den). Eksplicit kontrol af grænseflader giver større sikkerhed i store teams og offentlige API'er.

Mixin med tilstand

Mixins bør generelt være tilstandsløse (kun metoder). Mixins med tilstand kan give konflikter, hvis flere mixins bruger de samme feltnavne.

Sekventiel anvendelse af mixins

Når to mixins definerer den samme metode, vinder den sidst anvendte. Styr rækkefølgen bevidst for at få en forudsigelig adfærd.

Valg mellem mixin og nedarvning

Brug nedarvning til stærke er-en-relationer. Brug mixins til genanvendelig funktionalitet på tværs af klasser (logning, serialisering og lighed).

Spørgsmål om mixins

Hvad er en vigtig fordel ved mixins frem for nedarvning?

Opsummering: Mixins og grænseflader

Mixins kopierer metoder ind i klasser for at tilføje funktionalitet på tværs af klasser. Grænseflader dokumenterer påkrævede metoder og kan kontrolleres ved indlæsning. Sammen muliggør de fleksibel sammensætning ud over enkelt nedarvning.

Gratis at komme i gang

Lær Lua 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
40
Lektioner
159

Ofte stillede spørgsmål

Er lektionen “Mixin-sammensætning og interfacekontrol” gratis?

Ja — alle 3 lektioner i læringssporet Lua Academy, inklusive “Mixin-sammensætning og interfacekontrol”, 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. Lua Academy-kurset indeholder 4 lektioner i alt.

Hvad lærer jeg i “Mixin-sammensætning og interfacekontrol”?

Sammensæt flere funktionalitetstabeller, og kontrollér, at de overholder interfacet. Du øver dig i Lua 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å Lua Academy?

Der kræves ingen tidligere erfaring. Lua 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 3 af 4.

Hvor lang tid tager lektionen “Mixin-sammensætning og interfacekontrol”?

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 Lua Academy-lektion?

Ja. Alle Lua 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.

Alle lektioner i dette kursus

  1. Design af basisklasse og konstruktør
  2. Nedarvning på flere niveauer
  3. Mixin-sammensætning og interfacekontrol
  4. instanceof og typeinspektion
← Tilbage til Lua Academy