1. 交互模式运行lua时,由于一行就是一个命令,当用到局部变量就行不通了。可以采用do end。do命令执行后,匹配到end才结束。
2. 局部变量比全局变量快。局部变量随着其作用域结束而消失,垃圾收集器能将其释放。
3. 常用用法:local foo = foo -- 声明了一个局部变量 foo 然后用全局变量 foo 对其赋初值
.在在需要提高对 foo 的访问速度时很有用。
.当其他函数改变了全局变量foo的值,而代码段又需要保留foo的原始值时,这个用法也很有用,尤其是在进行运行时动态替换(monkey patching,猴子补丁)时:即使
其他代码把print动态替换成了其他函数,在local print = print 语句之前的所有代码使用的还都是原先的 print 函数。
4. 有些人认为在代码块的中间位置声明变量是一个不好的习惯:实际上:我们很少会在不赋初值的情况下声明变量,在需要时才声明变量可以避免漏掉初始化这个变量。
此外,通过缩小变量的作用域还有助于提高代码的可读性。
5. 和大多数其他编程语言不同,在Lua语言中,循环体内声明的局部变量的作用域包括测试条件:
repeat
sqr= (sqr+ x/sqr) / 2
local error= math.abs(sqr^2 - X)
until error < x/1000 -- 局部变量 'error' 此时仍然可见
6. 泛型for,比如pairs。可以使用多个变量,第一个变量变为 nil 时,循环终止。
7. 不需要在没有返回值的函数加return语句:所有函数最后都隐含return。
8. 代码中间插入return使用do代码块:do return end
9. goto 标签,代替lua语言中没有的 continue、多级 break、 多级 continue、 redo 和局部错误处理等。
标签遵循常见的可见性规则:不能直接跳转到一个代码块中的标签 (因为代码块中的标签对外不可见 )。不能跳转到函数外。不能跳转到局部变量的作用域。
10. 比较数据驱动编程(使用表来描述)和 goto编程(很少欣赏到,通体的流畅性有很大的弊端)。