Lua笔记2-变量和数据类型

--[[
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的最大正索引数!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值