表字段的元表值

我刚刚看到了一些C库针对lua 5.1的源代码。简化版本如下(我添加了我理解的注释):

LUALIB_API int luaopen_module(lua_State *L) {
    // 创建名为“module”的全局表,其中包含来自R_common的方法
    luaL_register(L, "module", R_common);

    // 从R_api1中创建一个元表
    luaL_newmetatable(L, "module.api1");
    luaL_register(L, NULL, R_api1);
    lua_pushvalue(L, -1);
    lua_setfield(L, -2, "__index"); // 元表.__index = 元表本身
    lua_setfield(L, -2, "api1"); // module.api1 = 元表

    return 1;
}

在lua中可以这样使用它:

require "module"

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

我对lua的经验很少,但是我知道-元表应该被设置为另一个表、用户数据或值(例如字符串)的元表。将元表用作表字段的值对我来说看起来很奇怪。这是一个错误还是需要用于某些情况?

点赞