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语句。