帮我理解这段Lua代码

时间:2011-01-12 19:41:02

标签: 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概念吗?

1 个答案:

答案 0 :(得分:10)

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

查看Prosody的源代码,这里发生的是加载配置文件的代码使用setfenvsetmetatable的组合来捕获全局变量(sslenabled)。当您编写enabled = false时,它实际上并不设置全局变量enabled,而是调用由Prosody代码定义的函数,该函数在当前定义的虚拟主机上设置属性。

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

您可以阅读setfenv heresetmetatable here(具体此代码使用__newindex metamethod)。