2 Types and Values
- 基础类型: - nil,- boolean,- number,- string,- userdata,- function,- thread,- table
- type()可以获取变量的动态类型,返回一个字符串 
- 除了 - 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 
 2- a = "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
 10- page = [[ 
 <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 
 2- data = "\x00\x01\x02\x03\x04\z 
 \x05\x06\x07\x08\x09"
- ..为字符串连接操作符
- 字符串和数字可以直接相互转换 - 1 
 2
 3
 4
 5- print("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
 3- a = {1, 2, 3} 
 print(a[1]) --> 1
 print(a[2]) --> 2
- 没有洞(nil)的list称为sequence,对于sequence,可以用 - #操作符获取其长度- 1 
 2
 3- for i = 1, #a do 
 print(a[i])
 end
- a.b和a[b]不同,a.b=a[“b”] 
- Lua中变量赋为函数,函数的参数和返回值也可为函数,table的索引也可以为函数 - 1 
 2
 3
 4
 5
 6- function f(n) 
 print(n)
 end
 a = {}
 a[f] = f
 a[f](10) --> 10
- 所有的变量在赋为nil之后会被回收