math_ult

math_ult是lua库函数math.ult的具体实现。math_ult的目的是将传入的两个参数转化成无符号整数之后,再进行大小的比较。请你注意:虽然math_ult不要求你传入的两个参数就是lua_Integer类型,但是只接受lua_Integerlua_Number和字符串,并且需要你保证传入的参数能正确转换成lua_Integer类型。 math_ult的声明如下:

static int math_ult (lua_State *L);

math_ult的实现:

static int math_ult (lua_State *L) {
    lua_Integer a = luaL_checkinteger(L, 1);
    lua_Integer b = luaL_checkinteger(L, 2);
    lua_pushboolean(L, (lua_Unsigned)a < (lua_Unsigned)b);
    return 1;
}

由上述代码可知,math_ult先尝试将传入的2个参数转换成整数a、b;转换成功后,将a、b强制转换成lua_Unsigned类型后,进行比较:

  • (lua_Unsigned)a 小于 (lua_Unsigned)b,将真入栈;
  • 否则,将假入栈。

最后,为什么命名为math_ultmath_ult可理解为**“math unsigned less than”**。