Skip to content

3.4.3 - 转换及强制转换

Lua在运行时中提供了对一些类型和表达的自动转换。位操作总是会将浮点操作数转换为整数。幂运算和浮点除法总是将整数操作数转换为浮点数。用于混合数字(整数和浮点数)的其他算术运算都是将整数操作数转换为浮点数。C API会根据需要将整数转换到浮点数或将浮点数转换到整数。此外,除了字符串,数字也可以作为字符串连接操作的参数。

从整数转换到浮点数的过程中,如果整数值有一个确切的浮点表示,那么结果就是这个表示的浮点数。否则,转换会得到一个与之最接近的值。这种转换永远不会失败。

从浮点数到整数的转换中会检查浮点数是否有确切的整数表示(即此浮点数有处于整数表示范围内的整数值)。如果检查成功,则这个整数表示就是其结果。否则,转换失败。

出于需要,Lua中的有些地方会将字符串强制转换到数字。尤其string库会设置元函数以尝试在算术操作中将字符串转化为数字。如果转化失败,此库会调用另一个操作数的元函数(如果存在的话)或者抛出错误。注意位操作不会执行此转换。

通常在良好实现中不会依赖字符串到数字的隐式转换,因为它们并不是一直适用的;比如 "1" == 1 为假,而 "1" < 1 会抛出错误(参见3.4.4)。这些强制转换主要是因为兼容性,并且其可能在语言的未来版本中删除。

字符串到数字或浮点数的转换遵循语法和Lua的词法解析器的规则。字符串的前后也可能有空格或其他字符。所有从字符串到数字的转换都接收点或者当前局部标记作为基数字符。(然而Lua的词法解析器只接受点。)如果字符串不是一个有效的数字表示,则转换失败。如果有必要,第一步的结果将按照之前的整数与浮点数的转换规则来转换到特定子类型。

数字到字符串的转换会使用常见的人类可读的格式。如果要用特殊的方式来将数字转换到字符串,可以使用string.format方法。