Skip to content

变量

在 Lua 中,变量是用于存储数据的容器。本章节将介绍 Lua 中变量的定义、作用域和相关操作。

变量定义

Lua 中的变量不需要声明类型,直接赋值即可:

lua
-- 全局变量
name = "Lua"

-- 局部变量
local age = 5.3

变量作用域

全局变量

在 Lua 中,默认情况下,变量是全局的,即使在函数内部定义也是如此:

lua
function test()
  globalVar = "全局变量"
end

test()
print(globalVar)  -- 输出 全局变量

局部变量

使用 local 关键字定义局部变量,局部变量只在其定义的作用域内有效:

lua
function test()
  local localVar = "局部变量"
  print(localVar)  -- 输出 局部变量
end

test()
print(localVar)  -- 输出 nil,因为 localVar 是局部变量

局部变量的作用域从其定义的位置开始,到所在的代码块结束:

lua
do
  local x = 10
  print(x)  -- 输出 10
end

print(x)  -- 输出 nil

变量赋值

单变量赋值

lua
local x = 10
print(x)  -- 输出 10

多变量赋值

Lua 支持多变量同时赋值:

lua
local a, b = 10, 20
print(a, b)  -- 输出 10  20

变量交换

利用多变量赋值的特性,可以方便地交换变量的值:

lua
local a, b = 10, 20
a, b = b, a
print(a, b)  -- 输出 20  10

函数返回多个值

函数可以返回多个值,这些值可以直接赋值给多个变量:

lua
function getMinMax(a, b, c)
  local min = math.min(a, b, c)
  local max = math.max(a, b, c)
  return min, max
end

local min, max = getMinMax(10, 5, 15)
print(min, max)  -- 输出 5  15

变量删除

将变量赋值为 nil 可以删除变量:

lua
local x = 10
print(x)  -- 输出 10

x = nil
print(x)  -- 输出 nil

变量命名规则

Lua 中的变量命名规则:

  1. 变量名可以包含字母、数字和下划线
  2. 变量名不能以数字开头
  3. 变量名区分大小写
  4. 不能使用 Lua 的保留字作为变量名

Lua 的保留字包括:

  • and, break, do, else, elseif, end, false, for, function, if, in, local, nil, not, or, repeat, return, then, true, until, while

变量类型

Lua 是动态类型语言,变量的类型可以在运行时改变:

lua
local x = 10
print(type(x))  -- 输出 number

x = "Hello"
print(type(x))  -- 输出 string

x = true
print(type(x))  -- 输出 boolean

x = {}
print(type(x))  -- 输出 table

全局变量表

所有全局变量都存储在一个名为 _G 的表中:

lua
name = "Lua"
print(_G.name)  -- 输出 Lua

_G.age = 5.3
print(age)  -- 输出 5.3

环境变量

使用 setfenv 函数可以修改函数的环境变量:

lua
function test()
  print(x)
end

local env = {x = 10, print = print}
setfenv(test, env)
test()  -- 输出 10

小结

本章节介绍了 Lua 中变量的定义、作用域、赋值、删除、命名规则和类型等内容。掌握这些内容,对于编写 Lua 程序非常重要。