第一版是为 Lua 5.0 编写的。虽然在很大程度上仍然适用于后续版本,但有一些差异。
第四版针对 Lua 5.3,可在 Amazon 和其他书店购买。
购买本书,您还可以帮助 支持 Lua 项目。
Lua 中的 编程 | ||
第一部分。语言 第 4 章。语句 |
除了全局变量,Lua 还支持局部变量。我们使用 local 语句创建局部变量
j = 10 -- global variable local i = 1 -- local variable与全局变量不同,局部变量的作用域仅限于声明它们的块。块是控制结构的主体、函数的主体或块(包含声明变量的代码所在的文件或字符串)。
x = 10 local i = 1 -- local to the chunk while i<=x do local x = i*2 -- local to the while body print(x) --> 2, 4, 6, 8, ... i = i + 1 end if i > 20 then local x -- local to the "then" body x = 20 print(x + 2) else print(x) --> 10 (the global one) end print(x) --> 10 (the global one)请注意,如果您在交互模式下输入此示例,它将无法按预期工作。第二行
local i = 1
本身是一个完整的块。当您输入此行时,Lua 会立即运行它并在下一行开始一个新的块。到那时,local 声明已超出作用域。要在交互模式下运行此类示例,您应该将所有代码都包含在 do 块中。
尽可能使用局部变量是一种良好的编程风格。局部变量可帮助您避免使用不必要的名称弄乱全局环境。此外,访问局部变量的速度比访问全局变量更快。
Lua 将局部变量声明作为语句处理。因此,您可以在可以编写语句的任何位置编写局部声明。作用域从声明后开始,一直持续到块的末尾。声明可以包含初始赋值,其工作方式与常规赋值相同:多余的值会被丢弃;多余的变量会获得 nil。作为一种特殊情况,如果声明没有初始赋值,它将使用 nil 初始化其所有变量。
local a, b = 1, 10 if a<b then print(a) --> 1 local a -- `= nil' is implicit print(a) --> nil end -- ends the block started at `then' print(a,b) --> 1 10
Lua 中的一个常用惯用语是
local foo = foo此代码创建一个局部变量
foo
,并使用全局变量 foo
的值对其进行初始化。当块需要保留 foo
的原始值(即使稍后其他函数更改了全局 foo
的值)时,此惯用语非常有用;它还可以加快对 foo
的访问速度。
由于许多语言强制您在块(或过程)的开头声明所有局部变量,因此有些人认为在块的中间使用声明是一种不好的做法。恰恰相反:仅在需要时声明变量,您很少需要在没有初始值的情况下声明变量(因此您很少忘记对其进行初始化)。此外,您缩短了变量的作用域,从而提高了可读性。
我们可以使用关键字 do-end 明确地限定一个块,用它们括起来。当您需要更精细地控制一个或多个局部变量的作用域时,这些 do 块可能很有用
do local a2 = 2*a local d = sqrt(b^2 - 4*a*c) x1 = (-b + d)/a2 x2 = (-b - d)/a2 end -- scope of `a2' and `d' ends here print(x1, x2)
版权所有 © 2003–2004 Roberto Ierusalimschy。保留所有权利。 |