Помогите мне понять этот кусок кода Lua - PullRequest
5 голосов
/ 12 января 2011

Я начал программировать на 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 Ответ

10 голосов
/ 12 января 2011

Нет прямой связи между первой линией и остальными.Первая строка эквивалентна VirtualHost("example.com") - вам не нужны круглые скобки, если вызову функции передается только один строковый параметр.

Если посмотреть на исходный код Prosody, то здесь происходит то, что код, который загружаетВ файле конфигурации используется комбинация setfenv и setmetatable для прерывания записи в глобальные переменные (ssl и enabled).Когда вы пишете enabled = false, он на самом деле не устанавливает глобальную переменную enabled, а вместо этого вызывает функцию, определенную кодом Prosody, которая устанавливает свойство на определенном в данный момент виртуальном хосте.

Все это реализовано в функции parsers.lua.load в core / configmanager.lua.

Здесь вы можете прочитать о setfenv и setmetatable здесь (именно этот код использует метаметод __ newindex ).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...