Lua中的__index元方法在C++中没有绑定。

我正在用Lua开发一款电子项目的软件库,这个库是相当面向对象的。我的对象有带有getter和setter的属性,这些属性分别使用__index和__newindex元方法实现。问题是__index元方法不起作用,而__newindex一个可以正常工作。我的绑定代码是:

int L_LED_ctor(lua_State* L){
    Board* board = GetInstance<Board>(L, 1, MT_BOARD);
    int pin = (int)luaL_checknumber(L, 2);
    LED** uData = (LED**)lua_newuserdata(L, sizeof(LED*));
    *uData = new LED(board, pin);
    luaL_getmetatable(L, MT_LED);
    lua_setmetatable(L, -2);
    return 1;
}

//getters and setters

extern "C" void RegisterComponent(lua_State* L){
    luaL_Reg led[] = {
        {"__index", L_LED_Get},
        {"__newindex", L_LED_Set},
        {"new", L_LED_ctor},
        {"Toggle", L_LED_Toggle},
        {NULL, NULL}
    };luaL_newmetatable(L, MT_LED);
    luaL_setfuncs(L, led, 0);
    lua_pushvalue(L, -1);
    lua_setfield(L, -1, "__index");
    lua_setglobal(L, "LED");
}

现在,当我执行这个Lua脚本:

led = LED.new(board, 16)
print(led.__index)
print(led.__newindex)

我得到以下输出:

table: 0xe7e38
function: 0xb6c27fac

这意味着__index metamethod是一个表,所以它没有从C++绑定。我的绑定代码有什么问题?

点赞