Lua "методы" на самом деле являются функциями. Они не имеют понятия self
, как на других языках. Как говорит Гвелл, obj:method(...)
на самом деле является синтаксическим сахаром для obj.method(obj, ...)
.
Если вам нужно работать с объектами, не сохраняйте ссылки на функции объекта - сохраните ссылку на сам объект. Вы можете использовать следующий код для вызова метода с использованием Lua C API:
/* get the object, idx is the identifier returned by luaL_ref */
lua_rawgeti(L, LUA_REGISTRYINDEX, idx);
lua_getfield(L, -1, "method");
/* push parameters - the object first, then the rest, then call the function */
lua_pushvalue(L, -2);
...
lua_call(L, nParams + 1, 1);