帮我理解这段Lua代码

问题描述:

我几天前开始在Lua编程。我已经熟悉了这个语法,并且我设法为Prosody XMPP服务器编写了一个模块。我跑到了Prosody服务器配置中的一段代码(这是在Lua中)。帮我理解这段Lua代码

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

我想弄清楚第二行中的表是如何链接到第一行的。

它是VirtualHost函数的参数吗?即代码可以写成:

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

是否有一些我需要进一步研究的Lua概念?

+0

我觉得这个堆栈交换[提案](http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2“代码审查”)可能会对你有利。如果它显示你的支持,并帮助它进入测试版! :) – greatwolf 2011-01-17 00:06:58

第一行和其他行之间没有直接联系。第一行等同于VirtualHost("example.com") - 如果函数调用仅传递一个字符串参数,则不需要括号。

看着韵律的源代码,这里发生了什么是加载配置文件中的代码使用的setfenvsetmetatable陷阱组合写入全局变量(sslenabled)。当您编写enabled = false时,它实际上并没有设置全局变量enabled,而是调用由Prosody代码定义的函数,该函数在当前定义的虚拟主机上设置属性。

这全部在core/configmanager.lua的parsers.lua.load函数中实现。

你可以阅读有关setfenvheresetmetatablehere(特别是此代码使用__newindex metamethod)。

+0

非常感谢,帮助我! – 2011-01-12 20:21:18