2010-09-25 4 views
2

В мире Warcraft аддонов, таблица передается как второй vararg:Как передать varargs в файлы lua?

-- This is often at the top of WoW lua files 
local AddonTable = select(2, ...) 

Есть ли способ сделать это с регулярным Lua? Я пытаюсь написать некоторые модульные тесты с минимальными изменениями в моем текущем коде. Пока я просто использую require, я могу использовать select(1, ...), чтобы получить первый требуемый параметр (модуль), но я не могу понять, как заполнить второй аргумент.

Update:

Вместо использования require, я могу использовать loadfile делать то, что мне нужно. Когда World Of Warcraft загружает аддон, он передает имя аддона и таблицу, которая может быть заполнена функциями вашего аддона. Я могу воспроизвести эту функциональность с этим кодом:

local addon = loadfile('MyAddon.lua') 
local AddonTable = {} 
addon('AddonName', AddonTable) 

ответ

1

Перефразируя ваш вопрос:

Сначала понять, что все, что происходит в ВоВ файл Lua в настоящее время lua_loadfile'd, то в результате замкнутости быть выполненный с двумя параметрами в стеке.

Это похоже на то, что требуется делать с внешней точки зрения, но когда вы думаете, что это происходит, это отличается.

Требовать возвращает модуль - это эквивалент таблицы WoW, которая является вторым аргументом. Требуемый параметр (имя модуля) является эквивалентом первого.

3

также, вызов выбора не требуется. Просто выполните: local AddonName , AddonTable = ...

+0

Мне не нужно использовать AddonName, мне просто нужно передать его для совместимости. –

+0

еще дешевле назначить его (и не использовать), чем называть select; но я думаю, что я просто собираю nit ... Обычная практика заключается в том, чтобы присваивать значения throw _ (например, когда вы используете string.find), но если вы знаете их смысл, вы можете также дать им имя. .. – daurnimator

Смежные вопросы