检查参数

lua-users home
wiki

这是一个 C 可变参数[1] 函数,旨在对 Lua CFunctions 的参数进行一定程度的严格类型检查。此代码专为 Lua 5.1 设计,并使用辅助库。

int luac_checkargs(lua_State *L, int count, ...)
{
  va_list ap;
  int i, t, u;
  va_start(ap, count);
  for (i = 1; i <= count; i++)
  {
    t = va_arg(ap, int);
    if (t<=LUA_TNIL) continue;
    u = lua_type(L, i);
    if (t!=u)
    {
      va_end(ap);
      return luaL_typerror(L, i, lua_typename(L, t));
    }
  }
  va_end(ap);
  if (lua_gettop(L)>count)
    return luaL_argerror (L, count+1, "too many arguments");
  return 0;
}

此函数的使用示例如下:

static int luac_testcheckargs(lua_State *L)
{
  luac_checkargs(L, 3, LUA_TNUMBER, LUA_TNIL, LUA_TBOOLEAN);
  return 0;
}

对于重载函数,能够针对多个类型单独检查单个参数会非常有用。LUA_TNILLUA_TNONE 用作转义字符,因此该函数不会检查该参数的类型。

欢迎评论。

--WilliamBubel


RecentChanges · preferences
编辑 · 历史
最后编辑于 2007 年 8 月 30 日下午 6:29 GMT (diff)