Я хочу установить дополнительные «методы» для некоторых таблиц, которые находятся в некотором lua_State.Установить методы для таблиц lua из C/C++/Rust
состояние имеет такой код:
obj = {}
function obj:method1()
print("value from second method = " .. self.method2())
end
я загрузить его do_file() метода. После этого я хочу добавить метод2() в таблицу obj. Этот метод 2() должен попасть в стек таблицы obj (как self) для правильной работы.
Я пытаюсь сделать это следующим образом:
state.get_global("obj");
if state.is_table(-1) {
state.push_string("method2");
state.push_fn(Some(method2));
state.set_table(-3);
}
или в C:
lua_getglobal(L, "obj");
if (lua_istable(L, -1)) {
lua_pushstring(L, "method2");
lua_pushcfunction(L, &lua_method2);
lua_settable(L, -3);
}
method2() функция записывается в порядке, одни и те же функции, которые я использую для «new_lib «и они работают хорошо.
Когда я делаю все, что в method2() я проверяю:
if (lua_istable(L, -1)) {
// Do some work
} else {
print("not a table!");
}
И я получаю «не таблица» вместо реальной работы.
Как я могу это сделать? И будет ли метод2() в Rust (C/C++, независимо) получить obj таблица (self) как первый параметр в стеке?
c/C++/ржавчина/не имеет значения .... как это не имеет значения, если вы хотите получить конкретный ответ? – user463035818
Вы пробовали этот код? Это сработало? Если это не сработало, то как это работает? Он взорвался? –
@ tobi303 Предположительно, это вопрос о Lua API, который более или менее одинаковый независимо от того, на каком языке программирования вы его используете. – Adrian