扩展Lua:检查传递给函数的参数数量

我想创建一个新的 Lua 函数。

我可以使用带有参数的函数(我正在遵循此链接)来读取函数参数。

static int idiv(lua_State *L) {
  int n1 = lua_tointeger(L, 1); /* first argument */
  int n2 = lua_tointeger(L, 2); /* second argument */
  int q = n1 / n2; int r = n1 % n2;
  lua_pushinteger(L, q); /* first return value */
  lua_pushinteger(L, r); /* second return value */
  return 2; /* return two values */
}

我想知道是否有一种方法可以知道传递给函数的参数数量,以便在用户不使用两个参数调用函数时打印消息。

当用户编写以下内容时,我想执行函数

idiv(3, 4)

在以下情况下,我想打印错误

idiv(2)
idiv(3,4,5)
以此类推...
点赞
用户142162
用户142162

你可以使用 lua_gettop() 来确定传递给 C Lua 函数的参数数量:

int lua_gettop (lua_State *L);

返回堆栈顶部元素的索引。因为索引从 1 开始,所以此结果等于堆栈中的元素数量(因此 0 表示空堆栈)。

static int idiv(lua_State *L) {
  if (lua_gettop(L) != 2) {
    return luaL_error(L, "expecting exactly 2 arguments");
  }
  int n1 = lua_tointeger(L, 1); /* 第一个参数 */
  int n2 = lua_tointeger(L, 2); /* 第二个参数 */
  int q = n1 / n2; int r = n1 % n2;
  lua_pushinteger(L, q); /* 第一个返回值 */
  lua_pushinteger(L, r); /* 第二个返回值 */
  return 2; /* 返回两个值 */
}
2015-04-04 17:36:31