Lua Academy · leksjon

Fabrikkfunksjoner og generatorer

Bruk closures som fabrikkfunksjoner for å produsere konfigurerte funksjonsinstanser.

Leksjon 3 av 413 trinn

Fabrikkfunksjoner og generatorer er en gratis leksjon i Lua Academy på CoddyKit. Dette er leksjon 3 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Lua Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva er en fabrikkfunksjon

En fabrikkfunksjon er en funksjon som oppretter og returnerer andre funksjoner, konfigurert av argumentene og upvaluene sine.

Enkel multiplikatorfabrikk

Hvert kall til multiplier returnerer en ny lukking som henter inn en annen factor.

local function multiplier(factor)
  return function(x) return x * factor end
end
local double = multiplier(2)
local triple = multiplier(3)
print(double(5))  -- 10
print(triple(5))  -- 15

Konfigurerbar loggerfabrikk

En loggerfabrikk henter inn en prefiksstreng og returnerer en loggfunksjon.

local function makeLogger(prefix)
  return function(msg)
    print("[" .. prefix .. "] " .. msg)
  end
end
local info = makeLogger("INFO")
local warn = makeLogger("WARN")
info("started")
warn("low memory")

Tellergenerator

En generator opprettholder intern tilstand og produserer en ny verdi ved hvert kall.

local function counter(start, step)
  local n = start - step
  return function()
    n = n + step
    return n
  end
end
local evens = counter(0, 2)
print(evens(), evens(), evens())  -- 0 2 4

Områdegenerator

En områdegenerator gir verdier fra from til to og returnerer nil når den er tom.

local function range(from, to, step)
  step = step or 1
  local i = from - step
  return function()
    i = i + step
    if i <= to then return i end
  end
end
for v in range(1, 5) do print(v) end

Partiell anvendelse

En fabrikk anvender noen av argumentene på forhånd for å opprette en spesialisert versjon av en funksjon.

local function partial(fn, ...)
  local args = {...}
  return function(...)
    local all = {table.unpack(args)}
    for _, v in ipairs({...}) do all[#all+1] = v end
    return fn(table.unpack(all))
  end
end
local add = function(a,b) return a+b end
local add10 = partial(add, 10)
print(add10(5))  -- 15

Memoiseringsfabrikk

En fabrikk kan bygge en memoiserende versjon av en kostbar funksjon.

local function memoize(fn)
  local cache = {}
  return function(x)
    if cache[x] == nil then cache[x] = fn(x) end
    return cache[x]
  end
end

Tilstandsfull tokenanalysator

En lexerfabrikk henter inn inndatastrengen og posisjonen, og gir neste token ved hvert kall.

local function lexer(input)
  local pos = 1
  return function()
    if pos > #input then return nil end
    local token = input:match("%S+", pos)
    if token then pos = pos + #token + 1 end
    return token
  end
end

Generatorer kontra korutiner

Generatorer basert på lukkinger er enklere, men lagrer all tilstand i upvalues. Korutinebaserte generatorer er kraftigere og tillater yield hvor som helst i kompleks logikk.

Funksjonsmaler

Fabrikker oppretter funksjonsmaler – vanlige mønstre som parametriseres ved opprettelsen og gjenbrukes mange ganger med ulike konfigurasjoner.

Currying

En curried funksjon tar imot ett argument om gangen og returnerer en ny funksjon helt til alle argumentene er oppgitt.

local function curry2(fn)
  return function(a)
    return function(b)
      return fn(a, b)
    end
  end
end
local curriedAdd = curry2(function(a,b) return a+b end)
print(curriedAdd(3)(4))  -- 7

Spørsmål om fabrikkfunksjoner

Hva er en viktig egenskap ved fabrikkfunksjoner?

Oppsummering: Fabrikkfunksjoner

Fabrikkfunksjoner produserer konfigurerte lukkinger og muliggjør partiell anvendelse, generatorer, memoisering og currying. De er blant de kraftigste funksjonelle mønstrene i Lua.

Gratis å komme i gang

Lær deg Lua med en AI-veileder – gratis

Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.

Kurs
40
Leksjoner
159

Ofte stilte spørsmål

Er leksjonen «Fabrikkfunksjoner og generatorer» gratis?

Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Lua Academy, inkludert «Fabrikkfunksjoner og generatorer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Lua Academy inneholder totalt 4 leksjoner.

Hva lærer jeg i «Fabrikkfunksjoner og generatorer»?

Bruk closures som fabrikkfunksjoner for å produsere konfigurerte funksjonsinstanser. Du øver på Lua Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.

Trenger jeg erfaring for å begynne med Lua Academy?

Ingen tidligere erfaring er nødvendig. Lua Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 3 av 4.

Hvor lang tid tar leksjonen «Fabrikkfunksjoner og generatorer»?

De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.

Kan jeg skrive og kjøre kode i denne Lua Academy-leksjonen?

Ja. Alle Lua Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.

Alle leksjonene i dette kurset

  1. Hva er upvalues?
  2. Delte upvalues mellom closures
  3. Fabrikkfunksjoner og generatorer
  4. Memoisering med closures
← Tilbake til Lua Academy