Добавлен scopterectus
Есть ли в Lua способ запустить все функции указанной таблицы?
test = { }
test.a = 123
test.b = true
function test.func0( )
end
function test.func1( )
end
function test.qab( )
end
Нужно сделать так, чтобы все функции test.func0( ), test.func1( ), test.qab( ) были запущены. При этом заранее не известно количество функций.
Принятый ответ
ScopteRectuS:
Правильно предполагаете, но мануалы же никому неинтересны, проже же вопрос задать.Предполагаю, что делается через какой-то цикл перебором всех элементов таблицы, если элемент является функцией, то запустить.
test = { }
test.a = 123
test.b = true
function test.func0()
print(0)
end
function test.func1()
print(1)
end
function test.qab()
print(2)
end
for k, v in pairs(test) do
if type(v) == 'function' then
print(k, ':')
v()
end
end
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
NazarPunk:
Сейчас уже всё понял. Спасибо.
Написал свой код, но не работает. Почему?
Отредактирован prog
Отредактирован scopterectus
Грубо говоря, герои в таблице Heroes, способности в таблице Abilities. Позволит ускорить перебор и избежать ненужных проверок.
Отредактирован prog
Сейчас у тебя в Ability складывается два типа данных - по равкоду героя его список способностей, а по каким-то другим ключам таблицы с данными конкретных способностей.
Естественно, я исхожу из предположения что триггеры срабатывания способностей переделаны на получение таблицы способности по равкоду, вместо отдельных триггеров на каждую способность.
Конструкция "if GetSpellAbilityId( ) ~= Ability[ HERO_DEATH_KNIGHT ][ Q ] then return end" ужасна - это вызов функции и два обращения к таблице/массиву в глобальной переменной. И хуже всего - эта конструкция вызывается каждый раз когда срабатывает триггер, а срабатывает он на все способности. Когда способностей будет сто и все на разных триггерах - аналогичная конструкция будет вызываться уже сто раз при каждом касте любой способности.
Отредактирован prog
Отредактирован scopterectus