Используя Lua, я пытаюсь динамически вызывать функцию с параметрами. Я хочу отправить строку, которая будет анализироваться таким образом, что:Lua: Динамическое вызов функции с аргументами
- первый аргумент является экземпляром класса «Handle»
- второй это функция будет называться
- Все, что осталось аргументы
«модули» аа таблицу, как { string=<instance of a class> }
раскола() является простой парсер, который возвращает таблицу с индексированных строк.
function Dynamic(msg)
local args = split(msg, " ")
module = args[1]
table.remove(args, 1)
if module then
module = modules[module]
command = args[1]
table.remove(args, 1)
if command then
if not args then
module[command]()
else
module[command](unpack(args)) -- Reference 1
end
else
-- Function doesnt exist
end
else
-- Module doesnt exist
end
end
Когда я пытаюсь это с «игнорировать удалить боб», по «Ссылка 1», он пытается вызвать «удалить» на экземпляре, связанные с «игнорировать» в модулях, и дает аргумент «боб», содержащихся в таблице (с одним значением).
Однако, с другой стороны вызова функция remove не принимает аргумент. Я даже попытался заменить линию «Reference 1» на
module[command]("bob")
но я получаю тот же результат.
Вот другая функция, которая не получает аргумент "bob"
:
function TIF_Ignore:remove(name)
print(name) -- Reference 2
TIF_Ignore:rawremove(name)
TIF_Ignore:rawremovetmp(name)
print(title.. name.. " is not being ignored.")
end
я добавил «Ссылка 2» в моем коде, когда я пытался выяснить, что случилось. Когда я «игнорирую remove bob», или когда я заменяю «unpack (args)» на «bob» на «Reference 1», переменная «name» в «remove» по-прежнему равна нулю.
Ваш код выглядит хорошо. Как выглядит «другая сторона». –
И как выглядит функция «split», потому что она не является частью стандартного Lua. –