如何检查传递给Lua的参数是否为用户定义类型?

我正在使用Lua为基于Ogre3d的应用程序实现脚本,遇到一个问题,即如何检查传递给函数的参数是否为特定类型 - Ogre :: SceneNode *。有人知道我该怎么做吗?

对于内置类型(例如int或string),有一些基本的Lua函数可以执行此操作,例如:

if(lua_isnumber(L,1)) {...}

但是我不知道如何处理用户定义的类型。

原文链接 https://stackoverflow.com/questions/5755238

点赞
stackoverflow用户703016
stackoverflow用户703016

我猜 lua_isuserdata(L, yourParam)

这应该是合乎逻辑的。

2011-04-22 12:15:17
stackoverflow用户33252
stackoverflow用户33252

如果你为同一种特定类型的每个 userdata 都安排共享一个元表,那么你可以使用 luaL_checkudata 来确认它们的类型。这通常是库标记和识别其创建的数据的方法。

以下是使用此技术创建和检查 userdata 的一些函数:

static decContext *ldn_check_context (lua_State *L, int index)
{
    decContext *dc = (decContext *)luaL_checkudata (L, index, dn_context_meta);
    if (dc == NULL) luaL_argerror (L, index, "decNumber bad context");
    return dc; /* 在 Lua 栈上留下 context */
}

static decContext *ldn_make_context (lua_State *L)
{
    decContext *dc = (decContext *)lua_newuserdata(L, sizeof(decContext));
    luaL_getmetatable (L, dn_context_meta);
    lua_setmetatable (L, -2); /* 设置元表 */
    return dc;  /* 在 Lua 栈上留下 context */
}

用以下代码创建元表:

const char *dn_context_meta = "decNumber_CoNTeXT_MeTA";
luaL_newmetatable (L, dn_context_meta);
2011-04-23 02:10:59