无法使 Lua 函数引用 'self'。

我正在尝试创建一个简单的类,其中包含一个成员函数,该函数将打印一些成员变量值,但是当我尝试引用“self”时,会出现错误:

尝试索引全局变量“self”(一个nil值)

以下是我试图运行的脚本:

Test = {}

function Test:new()
    T = {}
    setmetatable(T, self)
    self.__index = self
    self.Name =“测试对象”
    返回T
end

function Test:printName()
    print(“我的名字是” .. self.Name)- 这会导致错误
end

我还尝试过使用self:Name,但是我会收到类似的错误。我在这里做错了什么?

编辑:

忘记提到我从C ++代码调用printName()函数。如果我从Lua中调用函数,则可以正常工作。

Test对象在Lua中创建,然后执行回调函数。回调类似于这样在C ++中调用:

' luabridge :: LuaRef testObjectRef = ...; //这是从Lua中填充的,引用printName()函数 testObjectRef(); //调用函数'

回调在脚本中完成,如下所示:

--在Test:new()中
self.Callback = LuaCallback(self.printName)
Helper.setCallback(self.Callback)

如果我不尝试参考“self”,则回调本身运行良好。只有在我尝试这样做时才会出现错误。

点赞
用户752976
用户752976

我拿了你的代码,加了一些:

local test = Test:new()
test:printName()

这给了我正确的输出。

我的名字是Test Object

如果您通过C API调用它,您必须记住手动将self参数推送到堆栈上。请记住:

obj:fun() ~ obj.fun(obj)
2014-12-03 09:28:14
用户1755847
用户1755847

我设法解决了这个问题。我在监听器构造函数中添加了 self 作为额外参数,并将其作为回调函数的第一个参数传递。

--在脚本中
self.Callback = LuaCallback(self, self.printName)
Helper.setCallback(self.Callback)
2014-12-03 09:50:01