lua5.1 到 5.3的一些经常会接触到的改动

lua5.1 到 5.3的一些经常会接触到的改动
lua的官方文档,每个版本都有一节叫做"Incompatibilities with the Previous Version",
那里面简要描述了lua在语法、语义层面,标准库层面,CAPI层面上的变化,但是并没有涉及到方方面面,
并且lua的很多细微调整并没有出现在文档中,不过一般不用到太复杂的机制都不用担心。


而下面基本都是来自于这个章节的内容。但是不包含CAPI部分


5.2导致的改变


函数运行环境的概念发生了变化;
getfenv,setfenv被移除,要设置一个函数的运行环境,可以使用_ENV变量(函数的第一个upvalue)或者通过标准库 load来调用函数。
module函数也被废弃。


主动调用垃圾回收器时,如果垃圾回收器已经被关闭,将不会重新开启垃圾回收器。
如果table的key被设置为弱引用, 被称为一种短命的table(ephemeron table),当key不在被引用,那么整个pair都会被移除,
需要特别指出的是,如果对key的引用只来自于它所对应的value,那么整个pair也都会被移除
将table元表的__mode修改后,要到下一次垃圾回收器开始工作时才会生效
弱引用只对大多数引用类型生效,比如对number类型和string类型设置为弱引用是无效的


调试事件,“tail return” 被移除,取而代之的事件是”tail call“,程序可以根绝这个来判断下一次”return“事件
并不匹配最近的所有”tail call“

Lua 标准库:
math库更新了接口,有去掉的,有新增的,使用时请参照对应的版本
loadstring废弃,使用load代替,当第一个参数是string类型时,即相当于以前的loadstring
table.maxn被移除(它本身实现就需要遍历整个lua表),如果要实现自己用lua实现
unpack函数被移动到table.unpack
package.loaders重命名为package.searchers


不可以对函数进行 == 判断




5.3导致的改变


内部新增了整数类型,整数类型与浮点类型的运算结果为浮点类型。所以在抒写代码时就要求更严谨。
浮点类型现在直接通过字符串连接符转换成字符串,一定会带有小数点和小数部分,比如tostring(1.0)
以前的版本是结果是“1”,现在是“1.0”,所以对浮点数的格式化请使用显示的format,比如.f%, .1f%, .2f%


引入了位操作符(这个没有出现在Incompatibilities with the Previous Versio章节)


Lua 标准库:
bit32(5.2加入)库被移除,如需要请使用第三方库
table库的功能函数都会遵从table的元表元方法机制  (个人认为这一点改动非常好)
移除了5.2引入的__ipairs元方法,ipairs方法遵从元表元方法访问机制
math库接口重构,请参照对应版本,引入了^做幂运算

你可能感兴趣的:(lua)