2011-01-12 20 views
5

Empecé a programar en Lua hace unos días. Me he familiarizado con la sintaxis y he logrado escribir un módulo para el servidor Prosody XMPP. Corrí hacia un fragmento de código en la configuración del servidor Prosody (que está en Lua).Ayúdame a entender esta parte del código de Lua

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

Estoy tratando de averiguar cómo la tabla en la 2da línea está vinculada a la primera línea.

¿Es un parámetro de la función VirtualHost? es decir, ¿se puede escribir el código como:

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

¿Hay algún concepto de Lua que necesite estudiar más?

+0

Creo que esta [propuesta] de intercambio de pila (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "revisión de código") puede ser de su interés. ¡Si es muestra tu apoyo y ayuda a ponerlo en beta! :) – greatwolf

Respuesta

10

No hay una conexión directa entre la primera línea y el resto. La primera línea es equivalente a VirtualHost("example.com"); no necesita paréntesis si una llamada de función solo pasa un único parámetro de cadena.

Mirando el código fuente de la prosodia, lo que está sucediendo aquí es que el código que carga el archivo de configuración utiliza una combinación de setfenv y setmetatable para atrapar escribe en variables globales (ssl y enabled). Cuando escribe enabled = false, en realidad no establece la variable global enabled, sino que llama a una función definida por el código Prosody que establece la propiedad en el host virtual actualmente definido.

Todo esto se implementa en la función parsers.lua.load en core/configmanager.lua.

Usted puede leer acerca de setfenvhere y sobre setmetatablehere (específicamente este código se utiliza la __newindex metamethod).

+0

¡Muchas gracias, eso me ayudó! –

Cuestiones relacionadas