2 Types and Values
基础类型:
nil,boolean,number,string,userdata,function,thread,tabletype()可以获取变量的动态类型,返回一个字符串
除了
nil和false,其他均为true,包括0和空字符串Lua没有整型,所有数均为双精度浮点数,所以
12.7-20+7.3结果不完全等于0科学计数法,十进制:
4.57e-3,十六进制:0xa.bp2(a.b=10.6875, 0xa.bp2=10.6875*2^2)Lua的字符串可以只含一个字符,也可以包含正本书
没有办法改变字符串变量中的某一个字符,但可以赋一个新的字符串
stirng.gsub(a, "one", "another")把字符串a中的one改为another操作符
#可以用来获取字符串的长度1
2a = "hello"
print(#a) --> 5字符串可以用双引号也可以用单引号括起来,仅有一点区别:可以在引号里直接使用另一种引号而无需转义
转义字符:
1
2
3
4
5
6
7
8
9
10\a bell
\b back space
\f form feed
\n newline
\r carriage return
\t horizontal tab
\v vertical tab
\\ backslash
\" double quote
\' single quote字符也可以用
\ddd和\xhh表示,\ddd为10进制表示法,前导零用于消除后面紧跟的数字带来的歧义,\xhh为十六进制表示法,例如alo\n123\"与\97lo\10\04923与\x61\x6c\x6f\x0a\x31\x32\x33\x22均表示同一字符串长字符串的表示:
1
2
3
4
5
6
7
8
9
10page = [[
<html>
<head>
<title>An HTML Page</title>
</head>
<body>
<a href="http://www.lua.org">Lua</a>
</body>
</html>
]]
为了不与字符创中的[[和]]发生冲突,可以在两个方括号之间加上等量的等号,注释--[[和]]--也可以此解决冲突1
2
3
4
5
6
7
8
9
10page = [===[
<html>
<head>
<title>An HTML Page</title>
</head>
<body>
<a href="http://www.lua.org">Lua</a>
</body>
</html>
]===]
Lua里特设的转义字符
\z用于给字符串分行,它会跳到下一个非空字符1
2data = "\x00\x01\x02\x03\x04\z
\x05\x06\x07\x08\x09"..为字符串连接操作符字符串和数字可以直接相互转换
1
2
3
4
5print("10" + 1) --> 11
print("10 + 1") --> 10 + 1
print("-5.3e-10" * "2") --> -1.06e-09
print("hello" + 1) --> ERROR(cannot convert "hello")
print(10 .. 20) --> 1020
print(10 .. 20)中数字跟..之间需用空格隔开
明确的转换:
tonumber()和tostring()将数字转为字符串也可以通过跟
""连接1
print(10 .. "" == "10") --> true
在使用table之前需先构造它
table的索引可以为整数(列表型),也可以为字符串(记录型),也可以为其他类型,且均可以混用
构造列表时,下标从1开始而非0
1
2
3a = {1, 2, 3}
print(a[1]) --> 1
print(a[2]) --> 2没有洞(nil)的list称为sequence,对于sequence,可以用
#操作符获取其长度1
2
3for i = 1, #a do
print(a[i])
enda.b和a[b]不同,a.b=a[“b”]
Lua中变量赋为函数,函数的参数和返回值也可为函数,table的索引也可以为函数
1
2
3
4
5
6function f(n)
print(n)
end
a = {}
a[f] = f
a[f](10) --> 10所有的变量在赋为nil之后会被回收