2011-01-12 7 views
5

Ich begann vor ein paar Tagen in Lua zu programmieren. Ich habe mich mit der Syntax vertraut gemacht und es geschafft, ein Modul für Prosody XMPP Server zu schreiben. Ich habe einen Code-Ausschnitt in der Prosody Server-Konfiguration (in Lua) eingelesen.Helfen Sie mir, dieses Stück Lua Code zu verstehen

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

Ich versuche, herauszufinden, wie die Tabelle in der zweiten Zeile der ersten Zeile verknüpft ist.

Ist es ein Parameter für die VirtualHost-Funktion? das heißt kann der Code geschrieben wie:

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

Gibt es einige Lua Konzept, das ich weiter studieren müssen?

+0

Ich denke, dass diese Stack-Austausch [Vorschlag] (http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2 "Code-Review") könnte für Sie von Interesse sein. Wenn es Ihre Unterstützung zeigt und helfen Sie es in die Beta! :) – greatwolf

Antwort

10

Es gibt keine direkte Verbindung zwischen der ersten Leitung und dem Rest. Die erste Zeile entspricht VirtualHost("example.com") - Sie benötigen keine Klammern, wenn ein Funktionsaufruf nur einen einzelnen Zeichenfolgenparameter übergeben wird.

am Quellcode der Prosodie Sehen, geschieht hier, was ist, dass der Code, der die Konfigurationsdatei verwendet eine Kombination aus setfenv und setmetatable abzufangen schreibt in globale Variablen (ssl und enabled) lädt. Wenn Sie enabled = false schreiben, wird die globale Variable enabled nicht tatsächlich festgelegt, stattdessen wird jedoch eine Funktion aufgerufen, die durch den Prosody-Code definiert wird und die Eigenschaft auf dem aktuell definierten virtuellen Host festlegt.

Dies ist alles in der parsers.lua.load Funktion in core/configmanager.lua implementiert.

Sie können über setfenvhere und über setmetatablehere (speziell dieser Code verwendet die __newindex metamethod) lesen.

+0

Vielen Dank, das hat mir geholfen! –

Verwandte Themen