0

我只是看到一些用于 lua 5.1 的 C 库的源代码。简化版是这样的(我添加了我的理解的评论):

LUALIB_API int luaopen_module(lua_State *L) {
    // Creates global table "module" with methods from R_common
    luaL_register(L, "module", R_common); 

    // Creates metatable with methods from R_api1
    luaL_newmetatable(L, "module.api1");    
    luaL_register(L, NULL, R_api1);
    lua_pushvalue(L, -1);
    lua_setfield(L, -2, "__index"); // metatable.__index = metatable
    lua_setfield(L, -2, "api1"); // module.api1 = metatable

    return 1;
}

在 lua 中是这样使用的:

require "module"

local var = module.api1
var.somemethod(...)

我在 lua 方面几乎没有经验,但据我所知 - 元表应该设置为另一个表、用户数据或字符串等值的元表。使用 metatable 作为表字段的值对我来说看起来很奇怪。这是错误还是需要什么?

4

0 回答 0