Lua - 变量



变量只不过是我们程序可以操作的存储区域的名称。它可以保存不同类型的值,包括函数和表。

变量名可以由字母、数字和下划线组成。它必须以字母或下划线开头。由于 Lua 区分大小写,因此大写字母和小写字母是不同的。Lua 中有八种基本类型的值:

在 Lua 中,虽然我们没有变量数据类型,但根据变量的作用域,我们有三种类型。

  • 全局变量 - 除非明确声明为局部变量,否则所有变量都被视为全局变量。

  • 局部变量 - 当变量的类型指定为局部变量时,其作用域仅限于其作用域内的函数。

  • 表字段 - 这是一种特殊的变量类型,可以保存任何东西,除了 nil,包括函数。

Lua 中的变量定义

变量定义意味着告诉解释器在哪里以及如何创建变量的存储空间。变量定义可以选择类型,并包含一个或多个该类型的变量列表,如下所示:

type variable_list;

这里,type 可选择为局部变量或指定类型使其成为全局变量,而 variable_list 可以包含一个或多个用逗号分隔的标识符名称。这里显示了一些有效的声明:

local    i, j
local    i
local    a,c

语句 local i, j 同时声明和定义了变量 i 和 j;它指示解释器创建名为 i、j 的变量,并将作用域限制为局部变量。

变量可以在声明中进行初始化(赋值初始值)。初始化器由等号后跟一个常量表达式组成,如下所示:

type variable_list = value_list;

一些例子:

local d , f = 5 ,10     --declaration of d and f as local variables. 
d , f = 5, 10;          --declaration of d and f as global variables. 
d, f = 10               --[[declaration of d and f as global variables. 
                           Here value of f is nil --]]

对于没有初始化器的定义:具有静态存储持续时间的变量将隐式初始化为 nil。

Lua 中的变量声明

正如你在上面的例子中看到的,多个变量的赋值遵循 variable_list 和 value_list 格式。在上面的例子 local d, f = 5,10 中,我们有 d 和 f 在 variable_list 中,5 和 10 在 values list 中。

Lua 中的值赋值是这样的:variable_list 中的第一个变量与 value_list 中的第一个值对应,以此类推。因此,d 的值为 5,f 的值为 10。

示例 - 声明和使用变量

尝试以下示例,其中变量已在顶部声明,但在主函数内定义和初始化:

-- Variable definition:
local a, b

-- Initialization
a = 10
b = 30

print("value of a:", a)

print("value of b:", b)

-- Swapping of variables
b, a = a, b

print("value of a:", a)

print("value of b:", b)

f = 70.0/3.0
print("value of f", f)

当编译并执行上述代码时,会产生以下结果:

value of a:	10
value of b:	30
value of a:	30
value of b:	10
value of f	23.333333333333

Lua 中的左值和右值

Lua 中有两种表达式:

  • 左值 (lvalue) - 指向内存位置的表达式称为“左值”表达式。左值可以出现在赋值的左侧或右侧。

  • 右值 (rvalue) - 右值指的是存储在内存某个地址的数据值。右值是一个不能赋值的表达式,这意味着右值可以出现在右侧,但不能出现在赋值的左侧。

变量是左值,因此可以出现在赋值的左侧。数值文字是右值,因此不能赋值,也不能出现在左侧。以下是一个有效的语句:

g = 20

但以下语句无效,会生成构建时错误:

10 = 20

在 Lua 编程语言中,除了上述类型的赋值外,还可以在同一个语句中包含多个左值和右值。如下所示。

g,l = 20,30

在上述语句中,20 赋值给 g,30 赋值给 l。

示例 - 声明和初始化变量

尝试以下示例,其中变量已在顶部声明,但在主函数内定义和初始化:

-- Variable definition:
a, b = 10, 30

print("value of a:", a)
print("value of b:", b)

当编译并执行上述代码时,会产生以下结果:

value of a:	10
value of b:	30
广告