Skip to content

变量和赋值 ​

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) -- 输出 30

2. 赋值 ​

在 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)   -- 输出 5

3. 变量作用域 ​

在 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 function

4. 变量的初始化 ​

在 Lua 中,变量在首次赋值时会被初始化。如果变量在使用前没有被赋值,它将默认值为 nil。

lua
local a
print(a)  -- 输出 nil

结语 ​

能用 local 就用 local:作用域小,命名冲突少,出问题也好查。不带 local 就成了全局变量,这是 Lua 的默认行为,别把它当成习惯。

Hello Lua