19

对这一切有点困惑;所以这就是我想要做的!因此有一个定义:

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()函数的地址,以便在我的 spawn 中我可以执行以下操作:

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

4

2 回答 2

24

Lua 函数只是值,您可以使用它们的名称来分配它们,而无需使用括号:

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

block = { 
     startup = init
}

然后像普通函数一样调用它

block.startup()

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

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

startup = function() print("init") end
于 2013-06-07T12:50:14.627 回答
7

你只是忘记了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
于 2013-06-07T13:41:39.117 回答