如何使用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
处理程序更改为一个函数,以便在消息路由中加入一些条件逻辑。您可以使用两个元表链。