0Pricing
Lua Academy · Lezione

Cosa sono gli upvalue?

Comprenda come le closure catturano variabili degli scope esterni come upvalue.

Cosa sono gli upvalue? è una lezione Lua Academy gratuita su CoddyKit. Questa è la lezione 1 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 Lua Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Lua Academy include 4 lezioni in totale.

Riepilogo sulle closure

Una closure è una funzione accompagnata dai riferimenti alle variabili del suo ambito circostante. Le variabili catturate sono chiamate upvalue.

Esempio di upvalue

La funzione interna cattura count dall'ambito della funzione esterna.

local function makeCounter()
  local count = 0
  return function()
    count = count + 1
    return count
  end
end
local next = makeCounter()
print(next())  -- 1
print(next())  -- 2

Gli upvalue sono variabili vive

Gli upvalue non sono copie, ma riferimenti alla variabile. La closure può sia leggerli sia modificarli.

Più upvalue

Una closure può catturare più variabili da più ambiti esterni.

local function adder(x)
  return function(y) return x + y end
end
local add5 = adder(5)
print(add5(3))  -- 8

Durata degli upvalue

Gli upvalue rimangono in vita finché è in vita almeno una closure che vi fa riferimento. Vengono raccolti dal garbage collector solo quando tutte le closure che vi fanno riferimento sono state raccolte.

debug.getupvalue

È possibile esaminare gli upvalue con debug.getupvalue(fn, n), che restituisce il nome e il valore dell’n-esimo upvalue.

local x = 10
local function f() return x end
print(debug.getupvalue(f, 1))  -- x  10

Upvalue e variabile globale

Gli upvalue (variabili locali catturate dalle closure) sono più veloci delle variabili globali. La VM vi accede direttamente tramite un indice, senza cercare in una tabella.

Upvalue chiuso

Quando si esce dal blocco esterno, l’upvalue viene chiuso: viene spostato dallo stack all’heap. La closure continua a condividere questa cella nell’heap.

Upvalue aperti e chiusi

Aperto: l’upvalue si trova ancora nello stack (la funzione esterna è ancora in esecuzione). Chiuso: l’upvalue è stato trasferito nell’heap al termine dell’ambito esterno.

Caso d’uso pratico

Gli upvalue implementano naturalmente uno stato privato nelle closure: una funzione di modulo può mantenere uno stato privato senza esporlo globalmente.

local id = 0
local function newId()
  id = id + 1
  return id
end

Limite del numero di upvalue

Ogni funzione Lua può fare riferimento a un massimo di 255 upvalue. Nella pratica, questo limite raramente rappresenta un problema.

Domanda sugli upvalue

Che cos’è un upvalue?

Riepilogo: upvalue

Gli upvalue sono le variabili esterne catturate da una closure. Rimangono nell’heap dopo l’uscita dall’ambito esterno, sono condivisi tramite riferimento e forniscono uno stato privato e modificabile senza ricorrere a variabili globali.

Domande Frequenti

La lezione «Cosa sono gli upvalue?» è gratuita?

Sì — il testo completo di «Cosa sono gli upvalue?» è 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 Lua Academy, passa a CoddyKit PRO. Il corso Lua Academy include 4 lezioni in totale.

Cosa imparerò in «Cosa sono gli upvalue?»?

Comprenda come le closure catturano variabili degli scope esterni come upvalue. Eserciti Lua 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 Lua Academy?

Non è richiesta alcuna esperienza precedente. Lua 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 1 di 4.

Quanto tempo richiede la lezione «Cosa sono gli upvalue?»?

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

Sì. Ogni lezione Lua 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.

Tutte le lezioni di questo corso

  1. Cosa sono gli upvalue?
  2. Upvalue condivisi tra closure
  3. Funzioni factory e generatori
  4. Memoization con le closure
← Torna a Lua Academy