Недавно я пытался просмотреть WOW-аддон под названием VenturePlan, который вычисляет результат квеста вашей таблицы команд.

Это простой аддон с почти чистыми файлами .lua. Это Collector.lua, Loader.lua, MissionList.lua, MissionView.lua, VenturePlan.toc, vs-spells.lua, vs.lua, Widgets.lua. ',' Libs / Evie.lua '.

addon file structure

Я немного разбираюсь в программировании, например на Python и c. Но я не писал аддонов для WOW. Я застрял в самом начале этого аддона.

Почти в каждом файле есть фрагмент кода

local _, T = ...
local EV = T.Evie

Насколько я понимаю, этот код в самом начале обычно представляет собой объявление некоторой переменной или импорт модуля. Здесь, кажется, автор передал какое-то значение в 'T', но я не могу понять, где это происходит, и это даже не вызываемая функция, она находится в файле .lua.

Также я не смог найти точку входа. Кажется, сначала загрузится "Loader.lua", но ничего интересного он не возвращает.

Итак, откуда взялась буква «Т»? и какова его структура, где это определено?

Аддон находится здесь https://www.townlong-yak.com/addons/venture- план

0
martin.kathur 19 Янв 2021 в 06:24

2 ответа

Лучший ответ

Фрагменты Lua в файле загружаются как функция. WoW вызовет эти функции с двумя аргументами. Первый аргумент - это имя аддона, а второй - таблица, общая для всех файлов вашего аддона. Таким образом, вам не нужно использовать глобальную среду для обмена данными между вашими файлами.

local _, T = ... сохранит эти два аргумента в двух локальных переменных. _ обычно используется для обозначения неиспользуемых переменных. luacheck, например, не будет выводить предупреждения для неиспользуемых переменных с именем _

print(_, T) во всех этих файлах, и вы должны получить одну и ту же строку и таблицу.

0
Piglet 19 Янв 2021 в 15:07

Похоже, WoW откроет эти файлы * .lua с помощью C lua_load / luaL_dostring / luaL_dofile или Lua loadstring / loadfile; они преобразуют код Lua в функции. ... - это список аргументов вариативной функции; а множественное присвоение local _, T = ... означает, что _ id является первым аргументом, переданным функции, а T - вторым.

Возврат на самом деле не требуется для такого исполнения кода Lua. Он может отправлять данные обратно, изменяя полученные аргументы, поскольку таблицы передаются по ссылке; а также глобалы.

1
Alexander Mashin 19 Янв 2021 в 06:14