修改控件后,Lua 的输出变得神秘。

我使用 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

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

输出的含义是什么?我做错了什么?我应该如何修复它?

谢谢!

点赞
用户1442917
用户1442917

这似乎是一个内部诊断,用于wxLuaObject被销毁时,并且m_reference == LUA_NOREF(在您的情况下为-2),并且Lua状态对象不处于关闭状态(在您的情况下报告为0):

// 这是来自 modules/wxlua/src/wxlbind.cpp 的代码(在我的版本中从第83行开始)
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-27 22:53:24