Skip to content

3.3.2 - 代码块(Chunks)

Lua的编译单元称为一个代码块(Chunk)。从语法上说,一个代码块就是一个简单的语句块:

chunk ::= block

Lua将一个代码块作为具有可变参数的匿名函数体来处理(参见3.4.11)。因此,代码块可以定义局部变量、接收参数以及返回值。另外,此匿名函数是在一个称作_ENV的外部局部变量的范围下编译的(参见2.2)。这使得函数通常都拥有_ENV作为其唯一的外部局部变量,即使本身没有使用变量。

代码块可以被存储在文件或宿主程序的字符串中。当执行一个代码块,Lua首先会加载它,将代码块中的代码预编译为虚拟机的指令,然后Lua通过虚拟机的解释器来执行编译后的代码。

代码块被预编译为二进制形式;细节请参见程序luac和string.dump函数。程序中的代码形式和编译后形式是可以互换的;Lua会自动检测文件类型并采取相应行动(参见load)。