预期在','附近的函数参数

时间:2017-11-20 14:37:23

标签: unit-testing lua

我有一个如此定义的类:

local MyClass = {
 _VERSION = 'MyClass 1.0.0'
}
MyClass.__index = MyClass

setmetatable(MyClass, {
    __call = function (cls, ...)
        return cls.new(...)
    end
})

function MyClass.new(prop1)
    local self = setmetatable({}, MyClass)
    self.prop1 = prop1
    return self
end

function MyClass:msg(txt)
    self.prop1 = txt
    print(self.prop1)
end

function MyClass:callFunc(func, ...)
    pcall(func, ...)
end

我的客户端代码可能如下所示:

local inst = MyClass("value 1")
inst:msg("Hello world")
inst:callFunc(inst:msg, "Hello again")

当我运行此客户端代码时,收到错误消息

  

预期在','

附近的函数参数

代码是完全可重新编程的。您可以轻松查看here。只需复制粘贴并运行它,您将收到此错误消息。我该如何解决?

2 个答案:

答案 0 :(得分:7)

问题在于inst:msg中使用inst:callFunc(inst:msg, "Hello again"):语法只是一个"调用"约定(这就是为什么它需要函数参数),因此不能用于引用方法。您只需将其替换为inst.msgMyClass.msg,即可获得与预期相同的效果,而不会触发错误。

答案 1 :(得分:0)

我有一个有效的解决方案。我偶然得到了它。这是:

local MyClass = {
_VERSION = 'MyClass 1.0.0'
}
MyClass.__index = MyClass

setmetatable(MyClass, {
__call = function (cls, ...)
    return cls.new(...)
end
})

function MyClass.new(prop1)
    local self = setmetatable({}, MyClass)
    self.prop1 = prop1
    return self
end

function MyClass:msg(txt)
    if txt == nil then
        print(self.prop1)
    else
        self.prop1 = txt
        print("Two")
    end
end

function MyClass:callFunc(func, ...)
    pcall(func, ...)
end

-- client code

local inst = MyClass("value 1")
inst:callFunc(MyClass.msg, inst)

因此,主要思想是将带有点表示法的函数作为第一个参数传递,并将类实例作为第二个参数传递。希望它会帮助别人。