如何在Lua中将函数作为参数传递?

有些困惑,所以这是我尝试做的事情!

有这样一个 def:

block_basic_DEF =
{
    image = "button.png",
    name = "basic block",
    obj_table = this_obj_table.common_objects_table,
    startup = function() init(), <----- 这是问题所在
}

在另一个文件中,我按照预期访问它:

function spawn(params)
    local obj = display.newImage(params.image)
    -- etc.

block_basic_DEF 中,我希望传递 init() 函数的地址,以便在我的 spawn 中可以执行以下操作:

params.startup() --即实际调用原始的 init 函数

点赞
用户752976
用户752976

Lua 函数只是值而已,您可以直接使用它们的名称进行分配,不需要括号:

function init()
     print("init");
end

block = {
     startup = init
}

然后像一般函数一样调用它

block.startup()

这接近 OOP,但事实上它就像函数是普通值那样简单。

如果您想要类似于 lambda 的东西,您需要完整声明整个函数,省略名称:

startup = function() print("init") end
2013-06-07 12:50:14
用户1244588
用户1244588

您只是忘记了 end 关键字。它是函数定义的一部分,您不能省略它。您在 C 中也不会省略闭合的 } 对吧?

block_basic_DEF =
{
    image = "button.png",
    name = "basic block",
    obj_table = this_obj_table.common_objects_table,
    startup = function() init() end, -- <-- 这是问题所在
}

除此之外,下面的两种语法变体是相等的:

function foo()
end

foo = function()
end
2013-06-07 13:41:39