帮我理解这段Lua代码

我几天前开始学习Lua编程。我熟悉了语法,并成功为Prosody XMPP服务器编写了一个模块。我在Prosody服务器配置的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的概念吗?

原文链接 https://stackoverflow.com/questions/4673248

点赞
stackoverflow用户189205
stackoverflow用户189205

没有第一行和其他内容之间的直接连接。第一行相当于 VirtualHost("example.com") - 如果函数调用只传递一个字符串参数,则不需要括号。

观察 Prosody 的源代码,这里发生的事情是配置文件加载代码使用 setfenvsetmetatable 的组合来捕获对全局变量 (sslenabled) 的写入。当您写入 enabled = false 时,它实际上并没有设置全局变量 enabled,而是调用了由 Prosody 代码定义的一个函数,该函数设置当前定义的虚拟主机上的属性。

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

您可以在 这里 阅读有关 setfenv 的信息,也可以在 这里 阅读有关 setmetatable 的信息(特别是此代码使用了 __newindex metamethod)。

2011-01-12 20:03:31