--[[ 2.3 变量 写上变量的地方意味着当以其保存的值来替代之。 Lua 中有三类变量:全局变量,局部变量,还有 table 的域。 任何变量都被假定为全局变量,除非显式的以 local 修饰定义 (参见 §2.4.7)。 局部变量有其作用范围: 局部变量可以被定义在它作用范围中的 函数自由使用 (参见 §2.6)。 在变量的首次赋值之前,变量的值均为 nil。 --]]-- --[[ -- 2.4 chunk -- Lua 执行的每段代码,例如一个源代码文件或者在交互模式中输入的一行代码,都称为一个 chunk。一个chunk也就是一连串的语句或者命令。 -- 几条连续的lua语句之间并不需要分隔符,但如果愿意,也可以使用分号来分隔语句。 -- 例如:当两条或多条语句并列出现在同一行时使用分号分隔它们。 -- -- a=1 -- b=a*2 -- -- a=1;b=a*2 -- -- a=1 b=a*2 有点难看,但确实合法的 -- -- Lua 的一个执行单元被称作 chunk。 一个 chunk 就是一串语句段,它们会被循序的执行。 每个语句段可以以一个分号结束; -- -- 2.5 语句块是一列语句段;从语法上来说,一个语句块跟一个 chunk 相同. -- -- 2.6 Lua 允许多重赋值。 因此,赋值的语法定义是等号左边放一系列变量, 而等号右边放一系列的表达式。 两边的元素都用逗号间开. --赋值: 当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略: a. 变量个数 > 值的个数 按变量个数补足nil b. 变量个数 < 值的个数 多余的值会被忽略 a, b, c = 0, 1 print(a,b,c) --> 0 1 nil -- -- 2.7 Table 类型初步 -- --table类型实现了 “关联数组” 。“关联数组” 是一种具有特殊索引方式的数组。不仅可以通过整数来索引它,还可以使用字符串或其他类型 --的值(除了nil)来索引它。此外,table 没有固定的大小,可以动态的添加任意数量的元素到一个table中。 -- --lua是通过table来表示模块,包,和对象的。当输入io.read的时候,其含义是“io模块中的read函数”。对于lua而言,这表示“使用字符串read”作为 --key来索引table io 。 -- -- 如果真的想要数组下标从0开始: days = {[0]="Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"} 注意:不推荐数组下标从0开始,否则很多标准库不能使用。 在构造函数的最后的","是可选的,可以方便以后的扩展。 a = {[1]="red", [2]="green", [3]="blue",} 在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。 {x=10, y=45; "one", "two", "three"} -- --在构造函数的最后的","是可选的,可以方便以后的扩展。 a = {[1]="red", [2]="green", [3]="blue",} 在构造函数中域分隔符逗号(",")可以用分号(";")替代,通常我们使用分号用来分割不同类型的表元素。 {x=10, y=45; "one", "two", "three"} -- -- -- ]]-- --table 的生成和消灭 a={} print(type(a)) a.x=10 print(a['x']) b=a --a,b变量都对同一块内存的引用,即 ab都对table引用! b.x=20 print(a["x"]) a=nil --a的引用对象消灭了,但是b变量任然存在 print(type(a)) --a的值为nil,但是table占用的内存任然存在 print(b['x']) b=nil print(type(b)) --b已经不是table类型,值为nil,这时候再也没有对table的引用了,lua会回收这块内存空间并使用它。 a={} for i=1,10 do a[i]=io.read() -- end --[[ -- a["name"] 的语法糖 a.name -- -- ]]-- T1={} T1[100] = 1 print(#T1) --不处理nil值得元素,且当table遇到nil的值的时候,数组的大小(table)为0 -- print(table.maxn(T1)) --IDE 不能运行以上代码,但是,在lua纯环境里可以运行,maxn 处理nil的元素,它返回一个table的最大正索引数!
Lua笔记2-变量和数据类型
最新推荐文章于 2021-05-19 04:44:58 发布