Lua 基础教程(四)变量

173 阅读3分钟

Lua 基础教程(四)变量

hudson 译 原文

一个变量只是一个名称,用来指代程序中可以操作的存储区域。它可以容纳不同类型的值,包括函数和表格。

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

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

  • 全局变量 - 所有变量都被视为全局变量,除非明确声明为局部变量。
  • **局部变量 **- 当变量的类型被指定为局部时,其作用域仅限于其范围内的函数。
  • 表字段 - 这是一种特殊类型的变量,可以保存除 nil 之外的任何内容,包括函数。

变量定义

变量定义意味着告诉解释器在何处以及多少创建变量的存储。变量定义具有可选类型,并包含以下一个或多个变量的列表:

type variable_list;

这里,**type**可以是局部的(local)或者指定类型使其成为全局变量,而 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     --声明 d 和 f 为局部变量。 
d , f = 5, 10;          --声明 d 和 f 为全局变量。 
d, f = 10               --[[声明 d 和 f 为全局变量。 
                           此处 f 的值为 nil --]]

对于没有初始化的变量: 静态存储变量会隐式地用 nil 初始化。

变量声明

正如上面的示例中看到的,对多个变量的赋值遵循 variable_list 和 value_list 格式。在上面的示例中,local d, f = 5,10 中, 在 变量列表variable_list 中有 d 和 f,在值列表 values _list 中有 5 和 10。

赋值按顺序方式进行,variable_list 中的第一个变量赋值为value_list 中的第一个值 ,等等。 因此,d 的值为 5,f 的值为 10。

示例

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

Demo
-- 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

Lvalues 和 Rvalues

Lua 中有两种类型的表达式:

  • lvalue - 引用内存位置的表达式称为 "lvalue" 表达式。lvalue 可以出现在赋值的左侧或右侧。
  • rvalue - Rvalue 是指存储在某个内存地址中的数据值。rvalue 是一个表达式,不能给它赋值,rvalue 只出现在赋值的右侧,不能出现在左侧。

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

g = 20

以下语句是无效的,编译时会出现错误:

10 = 20

在 Lua 编程语言中,除了上述类型的赋值之外,也可以在同一条语句中有多个 lvalues 和 rvalues。如下所示:

g,l = 20,30

在上面的语句中,20 被赋值给 g,30 被赋值给 l。