Lua没有获取元表的功能。

我正在尝试让 Lua 与新的编程语言 D 协同工作。一切都正常运作(库、lua52.dll 等等),但 luaL_getmetatable 崩溃了。最初,在 dlua 中没有定义该函数,但我添加了它:

    //C     #define luaL_getmetatable(L,n)  (lua_getfield(L, LUA_REGISTRYINDEX, (n)))
    void luaL_getmetatable(lua_State* L, const(char)* s) {
        lua_getfield(L, LUA_REGISTRYINDEX, s);
    }

但是当我运行:

    L = lua_open();
    luaL_openlibs(L);
    //防止脚本小子
    luaL_dostring(L, "os = nil; io = nil");
    //重新编程 'print'
    luaL_newmetatable(L, "vector");
    luaL_getmetatable(L, "vector"); //崩溃

它会崩溃。有什么想法为什么会这样吗?

原文链接 https://stackoverflow.com/questions/10316585

点赞
stackoverflow用户969534
stackoverflow用户969534

也许你应该查看现有的 Lua 绑定工具,例如 LuaD

2012-04-25 13:30:27
stackoverflow用户388847
stackoverflow用户388847

看起来你正在使用古老的 dlua 绑定而非 LuaD,后者一直都有 luaL_getmetatable

然而,这两个绑定以及你的代码都是针对 Lua 5.1 版本的,而非 5.2 版本;请确保你链接到正确版本的 Lua。Lua 5.2 中没有 lua_open(在 5.1 中已被弃用)。

如果你在链接到正确的库后仍然遇到相同的问题,我建议使用宏 LUA_USE_APICHECK 编译 Lua 并再试一次,以查明问题的具体原因。

2012-04-25 23:20:04