# 变量 变量就是给一块内存区域赋予的一个名字。变量使得在程序中就可以修改或读取相应的内存区域中的内容。它可以代表各种不同类型的值,包括函数与表。 变量的名字由字母、数字与下划线组成。它必须是字母或下划线开头。由于 Lua 是字母大小写敏感的,所以大写字母与小写字母是不一样的。Lua 中有八种基本值类型: 在 Lua 语言中,虽然我们没有变量数据类型,但是依据变量的作用域我们可以将变量分为三类: ## Lua 变量定义 一个变量定义就意味着告诉解释器在什么地方创建多大的一块存储空间。一个变量定义包括一个可选的类型( type )以及该类型的一个或多个变量名的列表,如下所示: ``` type variable_list; ``` 其中,type 是可以选择指定为 local 或者不指定使用默认值 global,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。 ## Lua 变量声明 正如在上面例子看到的那样,为多个变量赋值就是在变量列表后跟上值列表。例子 local d,f = 5,10 中,变量列表是 d,f,值列表是 5,10。 Lua 赋值时会将第一个值赋给第一个变量,第二个值赋给第二个变量,依次类推。所以,d 的值是 5,f 的值是 10。 ## 示例 下面的示例中,变量被声明在顶部,但是它们在主函数中定义和初始化: ``` -- 变量定义: local a, b -- 初始化 a = 10 b = 30 print("value of a:", a) print("value of b:", b) -- 交换变量的值 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 中有两种表达式: 变量属于左值表达式,所以它可以现在赋值符号的左边。数值常量属于右值表达式,它不能被赋值也不能出现在赋值符号的左边。下面是合法的语句: ``` g = 20 ``` 但是,下面的语句是非法的,它会产生生成时错误: ``` 10 = 20 ``` 在 Lua 语言中,除了上面讲的这种赋值,还允许在一个赋值语句中存在多个左值表达式与多个右值表达式。如下所示: ``` g,l = 20,30 ``` 在这个语句中,g 被赋值为 20,l 被赋值为 30。