1

我正在使用 Lua 为基于 Ogre3d 的应用程序实现脚本,但在检查输入函数的参数是否为特定类型时遇到了问题 - Ogre::SceneNode*。有人知道我该怎么做吗?

有一些基本的 Lua 函数可以为 int 或 string 等内置类型执行此操作,例如

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

但我不知道如何使用用户定义的类型来做到这一点。

4

2 回答 2

2

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

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

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; /* leaves context on Lua stack */
}

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); /* set metatable */
    return dc;  /* leaves context on Lua stack */
}

元表是用

const char *dn_context_meta = "decNumber_CoNTeXT_MeTA";
luaL_newmetatable (L, dn_context_meta);
于 2011-04-23T02:10:59.960 回答
1

我猜lua_isuserdata(L, yourParam)

会合乎逻辑。

于 2011-04-22T12:15:17.617 回答