无法让 Lua 函数引用"self"



我正在尝试创建一个带有成员函数的简单类,该函数将打印出一些成员值,但是当我尝试引用"self"时出现错误:

attempt to index global 'self' (a nil value)

这是我尝试运行的脚本:

Test = {}
function Test:new()
    T = {}
    setmetatable(T, self)
    self.__index = self
    self.Name = "Test Object"
    return T
end
function Test:printName()
    print("My name is " .. self.Name) -- This causes the error
end

我也尝试过self:Name但我得到类似的错误。我在这里做错了什么?

编辑:

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

测试对象是在Lua中创建的,并完成了一个回调函数。回调C++调用如下:

luabridge::LuaRef testObjectRef = ...; // This is populated from Lua, refers to the printName() function
testObjectRef(); // Calls the function

脚本中的回调是这样完成的:

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

如果我不尝试引用self,回调本身工作正常。只有当我尝试这样做时,才会出现错误。

我拿了你的代码,补充说:

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

它给了我正确的输出。

My name is Test Object

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

obj:fun() ~ obj.fun(obj)

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

-- in the script
self.Callback = LuaCallback(self, self.printName)
Helper.setCallback(self.Callback)

相关内容

  • 没有找到相关文章

最新更新