Lua程序设计(九)

Lua语言中的变量在默认情况下是全局变量,这和我们熟悉的C、C++等语言默认情况下是局部变量不同。Lua中所有的局部变量必须用local关键字来声明,局部变量的生效范围仅在声明它的代码块中。

当需要控制局部变量的生效范围是可以使用do...end程序块。尽可能的使用局部变量是一种良好的编程风格。首先,局部变量可以避免由于不必要命名而造成全局变量的混乱;其次,局部变量可以避免同一程序中不同代码部分的命名冲突;最后,也是我个人认为很重要的一点就是,局部变量会随着作用域的结束而消失,从而使得垃圾收集器(GC)能够将其释放。

控制结构

Lua语言提供的常用的控制结构有if, while, repeat 和 for.所用的控制结构语法上必须有一个显示的终结符: end.

if,while 和 repeat 在其他编程语言中都有接触过,重点记录一下Lua的for循环结构。Lua的for循环结构主要分为两种,一种是数值型for, 这种循环和我们常见的for循环基本一致, 另一种for循环结构是泛型for. 泛型for遍历迭代函数所有的返回值。

 

Break,return 和 goto

break语句和return语句用于从当前的循环结构中跳出,goto语句则允许跳转到函数中的标签处执行。

Lua语言在使用goto时设置了一些限制条件。首先,标签遵循常见的可见性规则,即只能在当前代码块或者父代码块中可见,因此不能直接跳转到另一个代码块中的标签。其次,goto函数不能跳转到函数外。最后,goto不能跳转到局部变量的作用域。

goto语句虽然备受争议,但是它在编写状态机时其实还是很有用的。

::s1:: do
    local c = io.read(1)
    if c == '0' then goto s2
    elseif c == nil then print 'ok'; return
    else goto s1
    end
end

::s2:: do
    local c = io.read(1)
    if c == '0' then goto s1
    elseif c == nil then print 'not ok'; return
    else goto s2
    end
end


goto s1

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值