Как передать функцию в качестве параметра в Lua?
Бит путают все это; так вот что я пытаюсь сделать!
Иметь def так:
block_basic_DEF =
{
image = "button.png",
name = "basic block",
obj_table = this_obj_table.common_objects_table,
startup = function() init(), <----- This is the problem
}
В другом файле я получаю доступ, как можно было бы ожидать:
function spawn(params)
local obj = display.newImage(params.image)
-- etc.
В этом block_basic_DEF
я хочу передать адрес функции init()
таким образом, что в моем икру я могу сделать что-то вроде:
params.startup()
--i.e. на самом деле вызовите исходную функцию init
Я из C-фона, где это было всего лишь указателем на указатели, но этот плохой язык в мире ООП, по-видимому,!!!: -))
Приветствия
Ответы
Ответ 1
Функции Lua - это просто значения, и вы можете сгладить их, используя свое имя без парнеров:
function init()
print("init");
end
block = {
startup = init
}
И затем назовите его как обычная функция
block.startup()
Он близок к ООП, но на самом деле он так же прост, как тот факт, что функция является нормальным значением.
Если вам нужно что-то более похожее на лямбда, вы должны прописать всю функцию, опуская имя:
startup = function() print("init") end
Ответ 2
Вы просто забыли ключевое слово end
. Это часть определения функции, и вы не можете ее оставить. Вы бы не оставили закрытие }
в C или вправо?
block_basic_DEF =
{
image = "button.png",
name = "basic block",
obj_table = this_obj_table.common_objects_table,
startup = function() init() end, -- <-- This was the problem
}
Кроме того, следующие два варианта синтаксиса равны:
function foo()
end
foo = function()
end