Skip to content

3.3.1 - 语句块(Blocks)

语句块(Block) 是一个依序执行的语句列表:

block ::= {stat}

可以使用分号来分隔语句以开始一个新语句块,或者连续使用两个分号产生一个空语句

stat ::= ‘;’

函数调用和赋值都可以用左圆括号开头。但在Lua的语法中这可能会导致歧义。考量以下片段:

lua
a = b + c
(print or io.write)('done')

语法有两种方式看待此片段:

lua
a = b + c(print or io.write)('done')
a = b + c; (print or io.write)('done')

当前版本的解析器通常用第一种方式看待这个结构,将左圆括号解释为函数调用的开始。为了避免这种歧义,在良好的实现中通常会在圆括号为始的语句的开头加上分号:

lua
;(print or io.write)('done')

可以显式分割语句块以生成单独的语句:

stat ::= do block end

显式的语句块对于控制变量声明的范围十分有用。显式的语句块有时候也用于在其他的语句块中添加return语句。