帮我理解这段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概念?
答
第一行和其他行之间没有直接联系。第一行等同于VirtualHost("example.com")
- 如果函数调用仅传递一个字符串参数,则不需要括号。
看着韵律的源代码,这里发生了什么是加载配置文件中的代码使用的setfenv
和setmetatable
陷阱组合写入全局变量(ssl
和enabled
)。当您编写enabled = false
时,它实际上并没有设置全局变量enabled
,而是调用由Prosody代码定义的函数,该函数在当前定义的虚拟主机上设置属性。
这全部在core/configmanager.lua的parsers.lua.load
函数中实现。
你可以阅读有关setfenv
here约setmetatable
here(特别是此代码使用__newindex metamethod)。
+0
非常感谢,帮助我! – 2011-01-12 20:21:18
我觉得这个堆栈交换[提案](http://area51.stackexchange.com/proposals/11464/code-review?referrer=aWNm_PdciyFqjFW8CUacGw2“代码审查”)可能会对你有利。如果它显示你的支持,并帮助它进入测试版! :) – greatwolf 2011-01-17 00:06:58