检查参数

lua-users home
wiki

这是一个 C 可变参数[1] 函数,旨在对 Lua C 函数的参数进行较为严格的类型检查。此代码适用于 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


最近更改 · 偏好设置
编辑 · 历史记录
最后编辑于 2007 年 8 月 31 日凌晨 12:29 GMT (差异)