2011-01-12 2 views
5

Ho iniziato a programmare a Lua qualche giorno fa. Ho acquisito familiarità con la sintassi e sono riuscito a scrivere un modulo per il server Prosody XMPP. Mi sono imbattuto in uno snippet di codice nella configurazione del server Prosody (che è in Lua).Aiutami a capire questo pezzo di codice Lua

VirtualHost "example.com" 
    enabled = false; 
    ssl = { 
    key = "certs/example.com.key"; 
    certificate = "certs/example.com.crt"; 
    }; 

Sto cercando di capire come la tabella nella seconda riga è collegata alla prima riga.

È un parametro della funzione VirtualHost? vale a dire il codice può essere scritto come:

VirtualHost "example.com", { 
    enabled = false; 
    ssl = { 
    key = "certs/example.com.key"; 
    certificate = "certs/example.com.crt"; 
    }; 
}; 

c'è qualche concetto Lua ho bisogno di studiare ulteriormente?

+0

Penso che questa recensione del codice [proposta] (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "del codice") potrebbe interessarti. Se è mostrato il tuo supporto e aiutalo a farlo diventare beta! :) – greatwolf

risposta

10

Non esiste una connessione diretta tra la prima e il resto. La prima riga equivale a VirtualHost("example.com") - non è necessario disporre di parentesi se una chiamata di funzione viene passata solo un singolo parametro di stringa.

Guardando il codice sorgente di prosodia, ciò che sta accadendo qui è che il codice che carica il file di configurazione utilizza una combinazione di setfenv e setmetatable per intrappolare scrive in variabili globali (ssl e enabled). Quando scrivi enabled = false, in realtà non imposta la variabile globale enabled, ma invece chiama una funzione definita dal codice Prosody che imposta la proprietà sull'host virtuale attualmente definito.

Questo è tutto implementato nella funzione parsers.lua.load in core/configmanager.lua.

Si può leggere su setfenvhere e circa setmetatablehere (in particolare questo codice utilizza il __newindex metamethod).

+0

Grazie mille, questo mi ha aiutato! –