【发布时间】:2016-02-19 02:40:44
【问题描述】:
我想为某些 lua_State 中的某些表设置额外的“方法”。
状态有这样的代码:
obj = {}
function obj:method1()
print("value from second method = " .. self.method2())
end
我通过 do_file() 方法加载它。在此之后,我想将 method2() 添加到表 obj 中。这个method2()必须把tableobj(作为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!");
}
我得到“不是一张桌子”而不是实际工作。
我怎么能做这样的事情? Rust(C/C++, 不管) 中的 method2() 是否会将 obj 表 (self) 作为堆栈上的第一个参数?
【问题讨论】:
-
c/c++/rust/没关系....如果你想要一个具体的答案怎么可能没关系?
-
你试过那个代码了吗?它奏效了吗?如果它不起作用如何它不起作用?爆炸了吗?
-
@tobi303 想必这是一个关于 Lua API 的问题,不管你使用什么编程语言,它或多或少都是一样的。
-
编辑了问题,添加了更多代码和解释。我希望我做对了。
标签: c lua rust lua-table lua-api