Как передать функцию в качестве параметра в 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