Lua: Как ссылаться на метод lua внутри класса lua из C для дальнейшего использования? - PullRequest
0 голосов
/ 22 декабря 2010

Я получаю ссылку на метод lua, который находится внутри класса с функцией luaL_ref.Когда я хочу вызвать этот метод, я использую функцию lua_rawgeti для помещения функции в стек, а затем использую lua_pcall для фактического вызова метода. Все работает нормально, за исключением того, что я не могу получить доступ к другим членам класса из метода, потому что self равно nil.1001 *

Кто-нибудь знает, как я могу это исправить?

Спасибо!

Ответы [ 2 ]

2 голосов
/ 22 декабря 2010

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);
0 голосов
/ 22 декабря 2010

Оператор двоеточия Lua использует синтаксический сахар для помещения таблицы, на которую ссылаются, как первого параметра (a.k.a. self) в вызове функции. Вы должны иметь возможность поместить таблицу (объект) в качестве первого параметра вызова функции, и это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...