Skip to content

3.3.4 - 控制结构

控制结构ifwhilerepeat的含义都很常见而且有相似的语法:

stat ::= while exp do block end
stat ::= repeat block until exp
stat ::= if exp then block {elseif exp then block} [else block] end

Lua也有for语句,其有两种用法(参见3.3.5)。

控制结构中的条件表达式可以返回任何值。falsenil均表示假值。所有不同于nilfalse的值都表示真值。尤其数字0和空字符串也表示真值。

repeat-until循环中,其里边的语法块不是以until关键词为结束,而是在条件语句的后面。所以其条件表达式可以引用循环语法块中声明的局部变量。

goto语句用以改变程序的控制流到一个标签处。出于语法的原因,Lua中的标签也被视为语句:

stat ::= goto Name
stat ::= label
label ::= ‘::’ Name ‘::

标签在定义它的整个语法块中都是可见的,除了其内嵌的方法。goto可以跳转到任何可见的标签处,只要它没有进入另一个局部变量的作用域。不应当重复声明一个已存在的同名标签,即使这个此标签已经声明在完成的语法块中。

break语句会打断whilerepeatfor循环的执行,然后跳转到循环的下一条语句:

stat ::= break

break只跳出最内层的循环。

return语句被用来从方法或代码块(会被当成匿名函数处理)中返回值。方法可以返回多个值,所以return语句的语法为:

stat ::= return [explist] [‘;’]

return语句只能作为最后一条语句被写在语法块中。如果需要在语法块的中间return,你可以显式使用一个语句块,例如短句 do return end,这样现在return在(内部)语法块中就是最后一句了。