Lua - Базовая таблица функций
Я пытаюсь понять, как правильно работает таблица функций Lua.
Я хочу иметь возможность определять функции и затем перечислять эти функции в таблице, поэтому, когда я перебираю таблицу, я могу запускать каждую функцию.
Это мой код:
function qwe()
print ("qwe fired")
end
function asd()
print ("asd fired")
end
local tab = {
qwe(),
asd(),
}
function zxc()
print ("zxc start")
for k,v in pairs (tab) do
return v
end
print ("zxc end")
end
Я знаю, что это, скорее всего, очень простой вид вещей, но у меня нет реального опыта программирования (я пытаюсь самостоятельно изучить Lua), и большинство ссылок и примеров, кажется, полагаются на базовое понимание, которого мне не хватает.
2 ответа
Решение
local tab = {
qwe(),
asd(),
}
Вы назначаете результаты функций в таблицу вместо ссылок на функции. Вы должны делать:
local tab = {
qwe,
asd,
}
Если вам необходимо вызвать эти значения, вы просто используете их как функцию:
tab[1]() -- call `qwe` and discard results
-- or
tab[2]() -- call `asd` and discard results
-- or
for k,v in pairs (tab) do
return v() -- call first function and return its result(s)
end
Вот мои 2 решения, основанные на ответе Пола.
- загружать функции напрямую
function foo()
print("foo fired")
end
function goo()
print("goo fired")
end
function poo()
print("poo fired")
end
local roo = {
"foo()",
"goo()",
"poo()",
}
function zoo ()
print("\n ***** load function directly *****")
for k,v in pairs (roo) do
print(k,v)
load(v)()
end
print(" *** end ***\n\n")
end
- загрузить каскадную строку
function foo()
print("foo fired")
end
function goo()
print("goo fired")
end
function poo()
print("poo fired")
end
local roo = {
"foo",
"goo",
"poo",
}
function zoo ()
print("\n ***** load concatenated string *****")
for k,v in pairs (roo) do
print(k,v)
load(v.."()")()
end
print(" *** end ***\n\n")
end