Menu
Coddy logo textTech

Usare una funzione generica

Fa parte della sezione Introduzione a Luau del percorso Lua di Coddy. Lezione 59 di 73.

Non devi mai dire a identity che cos'è T: il checker lo deduce da solo. Questa è l'inferenza dei tipi: a ogni chiamata, Luau esamina l'argomento e determina T:

local word = identity("Luau")   -- T dedotto come string
local count = identity(12)      -- T dedotto come number
local flag = identity(false)    -- T dedotto come boolean

Ogni chiamata è indipendente: T può essere una stringa in una riga e un numero in quella successiva. Il risultato dedotto è altrettanto sicuro di un'annotazione scritta a mano: per il checker, word è una string, con completamento automatico completo e controllo degli errori.

Una differenza importante rispetto a TypeScript: TS ti consente di forzare il tipo nel punto della chiamata con identity<number>(5). Luau non supporta argomenti di tipo nel punto della chiamata. Quella riga non è una sintassi speciale, quindi Luau interpreta le parentesi angolari come confronti minore di/maggiore di e il codice non funziona. Se vuoi specificare esplicitamente il tipo, annota invece la variabile:

local count: number = identity(12)

Puoi osservare l'inferenza in azione con uno strumento familiare: typeof restituisce il nome del tipo in fase di esecuzione di un valore, quindi print(typeof(identity(12))) stampa number: il valore è passato attraverso la funzione generica senza alcuna modifica.

challenge icon

Sfida

Facile

La funzione generica identity della lezione precedente è già nel tuo editor. Metti a frutto la sua inferenza.

Crea tre variabili, lasciando che il verificatore inferisca T (non servono annotazioni):

  • word: chiama identity con "Luau"
  • count: chiama identity con 12
  • flag: chiama identity con false

Stampa quanto segue, ciascuno su una riga separata:

  1. word
  2. il risultato di typeof(word)
  3. count
  4. il risultato di typeof(count)
  5. flag
  6. il risultato di typeof(flag)

Provalo tu

-- La funzione generica identity della lezione precedente
local function identity<T>(value: T): T
    return value
end

-- Scrivi il codice qui
-- 1) crea word, count e flag con chiamate a identity (lascia che T venga dedotto)
-- 2) stampa ogni valore seguito dal suo typeof
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Introduzione a Luau

Esercitati da solo: Compilatore Luau online