我只是看到一些用于 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 作为表字段的值对我来说看起来很奇怪。这是错误还是需要什么?