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

Mar*_*ula 15 lua function

有点困惑这一切; 所以这就是我想要做的!因此有一个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
}
Run Code Online (Sandbox Code Playgroud)

在另一个文件中,我可以通过以下方式访问:

function spawn(params)
    local obj = display.newImage(params.image)
    -- etc.
Run Code Online (Sandbox Code Playgroud)

在那里block_basic_DEF我希望传递init()函数的地址,以便在我的spawn中我可以做类似的事情:

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

Bar*_*icz 21

Lua函数只是值,你可以使用他们的名字来设置它们而不用parens:

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

block = { 
     startup = init
}
Run Code Online (Sandbox Code Playgroud)

然后将其称为常规功能

block.startup()
Run Code Online (Sandbox Code Playgroud)

它接近OOP,但实际上它就像函数是正常值一样简单.

如果你想要一个更类似于lambda的东西,你必须拼出整个函数,省略名称:

startup = function() print("init") end
Run Code Online (Sandbox Code Playgroud)


dua*_*led 6

你刚忘了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
}
Run Code Online (Sandbox Code Playgroud)

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

function foo()
end

foo = function()
end
Run Code Online (Sandbox Code Playgroud)