将函数作为变量传递并将其分配给仍然能够引用的对象" self"在Lua

时间:2015-04-08 16:02:04

标签: mobile lua corona

所以,我正在尝试编写一个接受函数作为参数的函数,并将它们设置为Lua中的“对象”方法。是否有特定的语法,我不知道?

local function createObjectWithMethods(method1, method2)
    local object = {}
    object.meth1 = method1
    object:meth2 = method2 --this throws an error expecting parameters
    return object
end

还有其他方法可以解决这个问题吗?我知道我可以硬编码对象的方法,但是这段代码需要将函数作为参数传递,其中一些函数需要能够引用self。有任何想法吗?

1 个答案:

答案 0 :(得分:2)

您需要编写传入方法而不使用自动self语法糖。

那是你不能用的:

function obj:meth1(arg1, arg2)
    -- code that uses self
end

(除非这些函数在某个其他对象上定义并交叉应用于新对象)。

相反,你需要为自己写下以上的糖。

function meth1(self, arg1, arg2)
    -- code that uses self
end
function meth2(self, arg1, arg2)
    -- code that uses self
end

然后你可以正常调用函数并正常分配函数。

local function createObjectWithMethods(method1, method2)
    local object = {}
    object.meth1 = method1
    object.meth2 = method2
    return object
end

createObjectWithMethods(meth1, meth2)