extending Lua: 检查传递给函数的参数数量
extending Lua: check number of parameters passed to a function
我想创建一个新的 Lua 函数。
我可以使用带参数的函数(我正在关注 this link)以读取函数参数。
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)
and so on...
您可以使用 lua_gettop()
来确定传递给 C Lua 函数的参数数量:
int lua_gettop (lua_State *L);
Returns the index of the top element in the stack. Because indices start at 1, this result is equal to the number of elements in the stack (and so 0 means an empty stack).
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); /* 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 */
}
我想创建一个新的 Lua 函数。
我可以使用带参数的函数(我正在关注 this link)以读取函数参数。
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)
and so on...
您可以使用 lua_gettop()
来确定传递给 C Lua 函数的参数数量:
int lua_gettop (lua_State *L);
Returns the index of the top element in the stack. Because indices start at 1, this result is equal to the number of elements in the stack (and so 0 means an empty stack).
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); /* 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 */
}