Menu
Coddy logo textTech

Il metametodo __tostring

Fa parte della sezione Logica e flusso del percorso Lua di Coddy. Lezione 20 di 54.

Quando stampi una tabella in Lua, in genere vedi qualcosa di poco utile come table: 0x5f8a20, solo un indirizzo di memoria. Il metametodo __tostring ti permette di modificare questo comportamento definendo esattamente cosa deve essere visualizzato quando la tua tabella viene convertita in una stringa.

Questo metametodo è particolarmente utile per il debug e per creare un output più pulito. Quando Lua deve convertire la tua tabella in una stringa (ad esempio quando usi print()), controlla se la tabella ha un metatable con un campo __tostring. Se sì, Lua chiama quella funzione e usa il valore restituito al posto della rappresentazione predefinita.

Ecco come implementarlo:

local vector = {x = 3, y = 4}
local meta = {
    __tostring = function(t)
        return "Vector(" .. t.x .. ", " .. t.y .. ")"
    end
}

setmetatable(vector, meta)

print(vector)  -- Risultato: Vector(3, 4)

La funzione __tostring riceve la tabella come argomento e deve restituire una stringa. In questo esempio, costruisce una stringa formattata che mostra i valori x e y del vettore in un formato leggibile.

Questo rende il tuo codice molto più facile da gestire. Invece di vedere indirizzi di memoria criptici durante il debug, ottieni informazioni significative su ciò che contiene la tua tabella.

challenge icon

Sfida

Facile

Scrivi una funzione createPoint che accetta le coordinate x e y e restituisce una tabella punto con una rappresentazione testuale personalizzata.

Crea una tabella con i campi x e y, associa una metatabella con il metametodo __tostring e restituisci il risultato della conversione della tabella in una stringa usando tostring().

Logica:

  • Crea una tabella con le chiavi x e y impostate sulle coordinate fornite
  • Crea una metatabella con __tostring che restituisce una stringa nel formato "Point(x, y)"
  • Associa la metatabella alla tabella punto usando setmetatable()
  • Restituisci tostring(point) per ottenere la rappresentazione testuale personalizzata

Parametri:

  • x (numero): la coordinata x del punto
  • y (numero): la coordinata y del punto

Restituisce: La rappresentazione testuale personalizzata del punto nel formato "Point(x, y)" (stringa)

Provalo tu

function createPoint(x, y)
    -- Scrivi il codice qui
end
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 Logica e flusso

Esercitati da solo: Compilatore Lua online