0

我正在使用 Lua 和 wxLua 来构建 GUI。通常当我退出应用程序时,我没有得到 Lua 的输出。

但是我只是像这样向 wxListView(称为 myListView)添加了一个函数

myListView.foo = bar

function bar (self)
    -- do something with the wxListView
end

无论我是否调用过 foo(),当我退出应用程序时,我都会从 Lua 获得以下输出:

~wxLuaObject -2 1 0

如果我注释掉分配,退出应用程序时我不会得到任何输出。相反,我稍后在代码中将 foo 设为 nil :

myListView.foo = nil

当该行执行时,我立即得到相同的输出,然后在程序退出时再次得到相同的输出。

输出是什么意思?我究竟做错了什么?我如何解决它?

谢谢!

4

1 回答 1

1

这似乎是 wxLuaObject 被破坏并且m_reference == LUA_NOREF(在您的情况下为-2)并且 Lua 状态对象未处于关闭状态(在您的情况下报告为 0)的情况的内部诊断:

// this is from modules/wxlua/src/wxlbind.cpp (starts on line 83 in my version)
wxLuaObject::~wxLuaObject()
{
    if ((m_reference != LUA_NOREF) && m_wxlState->Ok() && !m_wxlState->IsClosing())
    {
        m_wxlState->wxluaR_Unref(m_reference, &wxlua_lreg_refs_key);
        m_reference = LUA_NOREF;
    }
    //else if (!m_wxlState->IsClosing())
    //    wxPrintf(wxT("~wxLuaObject %d %d %d\n"), (int)m_reference, (int)m_wxlState->Ok(), (int)m_wxlState->IsClosing());

我在我的 wxlua 代码 (2.8.12.1) 中注释掉了这条消息,但您可能需要检查您的版本并根据需要进行升级。~wxLuaObject这是源代码中唯一出现消息的地方。它似乎是无害的,但它可能指向您正在做的其他问题。

于 2012-09-27T22:53:24.117 回答