如何使用Lua';SCAPI
我已经创建了一个如何使用Lua';SCAPI,c,object,lua,lua-api,C,Object,Lua,Lua Api,我已经创建了一个userdata对象。我对对象的定义如下: static const luaL_Reg object_methods[] = { {"__gc", pbject_gc}, {"__tostring", object_print}, { NULL, NULL } }; static int object_new (lua_State *L) { Object *Object = lua_newuserdata(L, sizeof(Obj
userdata
对象。我对对象的定义如下:
static const luaL_Reg object_methods[] = {
{"__gc", pbject_gc},
{"__tostring", object_print},
{ NULL, NULL }
};
static int
object_new (lua_State *L)
{
Object *Object = lua_newuserdata(L, sizeof(Object));
luaL_getmetatable(L, "Object");
lua_setmetatable(L, -2);
return 1;
}
int
luaopen_Object (lua_State *L)
{
/* create metatable */
luaL_newmetatable(L, "Object");
/* metatable.__index = metatable */
lua_pushvalue(L, -1);
lua_setfield(L, -1, "__index");
/* register methods */
luaL_setfuncs(L, object_methods, 0);
/* Push a function: Object(...) => new Object */
lua_pushcfunction(L, object_new);
return 1;
}
我想制作一个不同的object\u new
,比如说object\u s\u new
用于“特殊新”。在object\u s\u new
中,如何将方法注入到对象元表中
我试着调用luaL_getmetatable
并编辑该表,但正如我所预料的那样,这会为使用它的所有对象编辑metatable。我希望注入的方法仅限于由object\u s\u new
创建的对象
在不创建完全独立的元表的情况下,是否仍然可以执行此操作?这对Lua有什么奇怪的影响吗?例如,我可以将一个
struct脚本
作为两种不同的userdata
类型吗?如果只想将方法注入到对象实例中,根本不需要元表。只需在其上设置一个常规字段。@BartekBanachewicz对象是一个userdata。在其上设置字段的唯一方法是通过元表。他可能需要一个新的元表,或者必须将他的\uu index
处理程序更改为一个函数,以便在消息路由中加入一些条件逻辑。您可以使用两个元表链。如果您只想将该方法注入一个对象实例,则根本不需要元表。只需在其上设置一个常规字段。@BartekBanachewicz对象是一个userdata。在其上设置字段的唯一方法是通过元表。他可能需要一个新的元表,或者必须将他的\u index
处理程序更改为一个函数,以便在消息路由中加入一些条件逻辑。您可以使用两个元表链。