在lua中调用undefined函数时接收任何通知

时间:2012-10-24 03:35:18

标签: function lua undefined-symbol

在C ++代码中:

class CWindowUI {
  public CWindowUI(const char* title,int width,int height);
  .....
};

static int CreateWindow(lua_State *l)
{
    int          width,height;
    char        *title;
    CWindowUI  **winp, *win;

    name = (char *) luaL_checkstring(l, 1);
    width= lua_tounsigned(l, 2);
    height= lua_tounsigned(l, 3);

    win = new CWindowUI(title,width,height);
    if (win == NULL) {
        lua_pushboolean(l, 0);
        return 1;
    }

    winp = (CWindowUI **) lua_newuserdata(l, sizeof(CWindowUI *));
    luaL_getmetatable(l, "WindowUI");
    lua_setmetatable(l, -2);
    *winp = win;

    return 1;
}

在Lua代码中:

local win = CreateWindow("title", 480, 320);
win:resize(800, 600);

现在我的问题是:

函数CreateWindow将返回名为win的对象,并且未定义函数resize。当我在Lua中调用未定义的函数时,如何收到通知?

通知应包括字符串"resize"和参数800,600。 我想修改源代码以将未定义的函数映射到回调函数,但它不正确。

1 个答案:

答案 0 :(得分:2)

  

当我在lua中调用未定义的函数时,如何收到通知。

你没有。不是你的意思。

您可以将an __index metamethod挂钩到已注册的“WindowUI”metatable(*呻吟*)上。你的metamethod只会获得调用它的用户数据和使用的密钥。

但是你不能区分函数调用和简单地访问成员变量,因为 Lua 不区分它们。如果从元方法返回一个函数,并且用户在元方法返回时调用函数调用操作符,则会调用它。否则,他们会得到一个他们认为合适的功能。他们可以存储它,传递它,稍后调用它,无论如何。这是一个价值,就像其他任何一样。