3.2 关系操作符
1、
<、>、<=、>=、==、~=(不等性测试)
结果都是 true 或 false
2、nil 只与自身相等
3、对于 table、userdata 和函数,Lua 是作引用比较的。(只有当它们引用同一个对象时,才认为它们相等)
4、
- 数字和字符串 可以作大小性比较,相等性比较和不等性比较
其他类型 只能作相等性比较和不等性比较
5、注意不同类型的值做比较
'0' != 0
2 < 15
‘2’ < ‘15’ -- 错误
2 < '15' -- 引发一个错误
<、>、<=、>=、==、~=(不等性测试)
结果都是 true 或 false
其他类型 只能作相等性比较和不等性比较
'0' != 0
2 < 15
‘2’ < ‘15’ -- 错误
2 < '15' -- 引发一个错误
+、-、*、/、^(指数)、%(取模)
%
a % b = a - floor(a/b)*b
x % 1 -- x 的小数部分
x - x % 1 -- x 的整数部分
x - x % 0.01 -- 精确到小数后两位
-(负号)
不仅可以通过整数来索引它,还可以使用字符串或其他类型的值(除了nil)来索引它
如,输入 io.read() 时,对于 lua,表示使用字符串 "read" 作为 key 来索引 "table.io"
a = {}
a[k] = 10
print(a[k]) -- 10
a = {}
a['x'] = 10
b = a -- b 和 a 引用了同一个 table
print(b['x']) -- 10
b['x'] = 20
print(a['x']) --20
a = nil -- 只有 b 还在引用 table
b = nil -- 没有对 table 的引用了
当一个程序再没有对一个 table 的引用时,lua 的垃圾收集器最终会删除该 table,并复用它的内存
a.x = 10 等价于 a['x'] = 10
a = {}
x = 'y'
a[x] = 10
print(a[x]) -- 10
print(a.x) -- nil
print(a.y) --10
a = {}
for i = 1,10 do
a[i] = io.read()
end
a = {}
for i = 1,10 do
a[i] = io.read() -- 1 2 3 4 5 6 7 8 9 10
end
for i = 1,#a do
io.write(a[i]) -- 1 2 3 4 5 6 7 8 9 10
end
print(a[#a]) -- 10
a[#a+1] = 11 -- 将11添加到列表末尾
print(a[#a]) -- 11
print(a[#a+1]) -- nil
a = {}
for i =1,10 do
a[#a+1] = io.read()
end
a = {}
a[1000] = 1
print(#a) -- 0
print(table.maxn(a)) -- 1000
local tblTest2 =
{
1,
a = 2, -- 记录
3,
}
print(table.getn(tblTest2)) -- 1
既然像函数一样,那就可以输出a的值。print(tblTest2.a)就可以了。
t= {
[1]=4,
[2]=5,
[3]=6,
[4]=7,
[6]=8,
}
print("#" ,#t , "getn",table.getn(t) ,"maxn", table.maxn(t) ) -- 6 6 6
print(t[5])` -- nil
t= {
[1]=4,
[2]=5,
[3]=6,
[5]=7,
[6]=8,
}
print("#" ,#t , "getn",table.getn(t) ,"maxn", table.maxn(t) ) -- 3 3 6
local tblTest4 =
{
1,
nil,
}
print(table.getn(tblTest4)) -- 1
local tblTest5 =
{
1,
nil,
2,
}
print(table.getn(tblTest5)) -- 3
local tblTest5 =
{
1,
nil,
2,
nil
}
print(table.getn(tblTest5)) -- 1
4, 0.4, 4.57e-3, 0.3e12