В Lua 5.x C API можно добавлять метаданные и, следовательно, метаметоды в данные пользователя.
Я пытаюсь реализовать его в Lua 4.0 (я знаю, что он старый, но он работает на устройстве) с помощью следующего кода, но он не работает:
/* push the tagmethod (cfunction getShare) */
lua_pushcfunction(state, getShare);
/* set the userdata tag 'tag' gettable tagmethod */
lua_settagmethod(state, tag, "gettable");
/* push the userdata before returning the call from cfunction */
lua_pushusertag(state, ptr, tag);
В Lua:
local userdata1 = myFn () - <- возвращает данные пользователя </p>
local userdata11 = userdata1 -- <-- doesn't call getShare
Я ожидал, что метод будет вызван.
Я попытался использовать тэг «index» или другой, но безуспешно.
Конечно, у меня все еще есть возможность обернуть данные пользователя в таблицу и добавить метки в таблицу, но тогда они будут изменены пользователем, и это то, чего я не хочу.
Спасибо