math_toint是lua函数math.tointeger的具体实现,其声明如下:
static int math_toint (lua_State *L);
math_toint接受一个参数,将其转换成整数;转换成功,就将转换后的整数压栈;否则,就将nil压入栈中。 math_toint的实现:
static int math_toint (lua_State *L) {
int valid;
lua_Integer n = lua_tointegerx(L, 1, &valid);
if (valid)
lua_pushinteger(L, n);
else {
luaL_checkany(L, 1);
lua_pushnil(L); /* value is not convertible to integer */
}
return 1;
}
math_toint首先调用lua_tointegerx(接受整数、浮点数、字符串)尝试将参数转换成整数:
lua_Integer n = lua_tointegerx(L, 1, &valid);
转换成功,valid为真;否则valid为假。 math_toint随后对valid进行真假判断:
luaL_checkany(L, 1);
就会报错。最后返回1,表明math_toint的返回值只有1个。 注意,调用lua函数math.tointeger时(实际调用math_toint),必须由调用者保证传递的参数能正确地表示为整数: