变量和赋值
Lua 的变量是动态类型的,运行时可以给同一个变量赋不同类型的值。这一节讲定义、赋值和作用域。
1. 变量定义
在 Lua 中,变量不需要预先声明其类型,直接使用 local 关键字或直接赋值即可定义一个变量。local 关键字用于定义局部变量,而没有 local 的变量将成为全局变量。
局部变量
局部变量的作用范围限制在定义它的块中,例如函数、控制结构等。局部变量有助于避免命名冲突和提高代码的可读性。
lua
local x = 10
local y = 20
print(x) -- 输出 10
print(y) -- 输出 20全局变量
全局变量在 Lua 中是默认的,如果你没有使用 local 关键字定义变量,那么它将是全局的。全局变量的作用范围是整个脚本或程序。
lua
z = 30 -- 全局变量
print(z) -- 输出 302. 赋值
在 Lua 中,你可以通过赋值操作将值分配给变量。赋值操作可以同时进行多个变量的赋值,也可以通过表达式进行赋值。
单个变量赋值
你可以将一个值直接赋给一个变量:
lua
local name = "Lua"
local version = 5.4多重赋值
Lua 支持多重赋值,一行同时给多个变量赋值。
lua
local a, b, c = 1, 2, 3
print(a) -- 输出 1
print(b) -- 输出 2
print(c) -- 输出 3表达式赋值
你还可以将一个表达式的结果赋值给一个变量:
lua
local sum = 10 + 20
local product = 5 * 6
print(sum) -- 输出 30
print(product) -- 输出 30表中的赋值
Lua 中的表(table)可以用来存储和组织数据。表的字段赋值也遵循类似的规则:
lua
local person = {}
person.name = "Lua"
person.age = 5
print(person.name) -- 输出 Lua
print(person.age) -- 输出 53. 变量作用域
在 Lua 中,变量的作用域决定了它的可见性和生命周期。局部变量只能在其定义的块内访问,而全局变量则可以在任何地方访问。
局部变量的作用域
局部变量在定义它的块内有效,一旦块结束,局部变量将被销毁:
lua
do
local x = 10
print(x) -- 输出 10
end
print(x) -- 输出 nil:局部变量 x 已超出作用域,这里访问的是全局变量 x全局变量的作用域
全局变量在整个脚本中有效,除非在某个块内被重新赋值:
lua
globalVar = "I am global"
function test()
globalVar = "Modified in function"
end
test()
print(globalVar) -- 输出 Modified in function4. 变量的初始化
在 Lua 中,变量在首次赋值时会被初始化。如果变量在使用前没有被赋值,它将默认值为 nil。
lua
local a
print(a) -- 输出 nil结语
能用 local 就用 local:作用域小,命名冲突少,出问题也好查。不带 local 就成了全局变量,这是 Lua 的默认行为,别把它当成习惯。