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
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之后会被回收