1、Lua中有8种基本类型:
nil(空)、boolean(布尔)、number(数字)、string(字符串)、userdata(自定义类型)、function(函数)、thread(线程)、table(表)
2、函数type可返回其类型的名称,例如:
print(type(10))-->number
print(type(type(x)))-->string
3、Lua与C不同:
(i)其变量没有类型,可以一个变量可以赋值一个整形数,接着也可以赋值为一个字符串,是合法的。
(ii)函数为第一类值,可以赋值给一个变量
(iii)在条件测试中,数字零和空字符串也视为”真“
4、一个全局变量第一次赋值前的默认值就是nil,将nil赋予一个全局变量等同于删除它
5、Lua中可以通过string.gsub()修改字符串的一部分
a = "one string"
b = string.gsub(a, "one", "another")
print(a) -->one string
print(b) -->another string
6、转义字符跟C语言类似,\a 响铃 \b退格 \f提供表格 \n换行 \r回车 \t水平tab \v垂直tab \\反斜杠 \"双引号 \'单引号
7、字面字符串,单引号、双引号皆可
8、可以用一对匹配的双方括号来界定一个字符串,就像写”块注释“那样。以这种形式书写的字符串可以延伸多行,Lua不会解释其中的转义序列。Lua同时支持[===[ 内容 ]===]这种风格的字符串,在‘[’ ‘[ 之间插入n个等号,字符串结尾‘]’ ‘]’之间有同样个数的等号即可。这种机制同样也适用于注释。
9、算术操作时,Lua会尝试将这个字符串转换成一个数字
print("10" + 1)-->11
虽然有这个功能但不推荐使用,最好显示的适用tonumber()函数
print(tonumber("10") + 1) -->>11
10、在Lua中,”..“是字符串连接操作符,注意当直接在一个数字后面输入它的时候,必须要用一个空格来分隔他们,不然,Lua会将第一个点理解为一个小数点,
这里推荐使用它是前面都留一个空格。
print(10 .. 20)-->1020
将数字与一个空字符串相连接跟tostring()函数同样作用
print(tostring(10) == "10")<==>print(10 .. "" == "10")
11、在Lua5.1中,可以再字符串前放置操作符”#“来获取该字符串的长度
print(#"hello")--> 5
12、 table类型,table既不是”值“也不是”变量“,而是”对象“,table的创建是通过”构造表达式“完成的,最简单的构造表达式就是{}。table不同于数组,可以用任何不同的类型来做索引,并且同一个table的索引(key)和值(value)可以是不同类型。例如:
a = {} --创建一个talbe,并将它的引用存储到a。
table永远是"匿名的",一个持有table的变量与talbe自身之间没有固定的关联性。
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,并复用它的内存。
13、a.x = 10 等同于 a["x"] = 10,注意不等同于a[x]
14、虽然可以用任何值作为一个table的索引,也可以用任何数字作为数组索引的初始值。但就Lua的习惯而言,数组通常以1作为索引的起始值。当需要容纳新条目时,table会自动增长。当table的某个元素没有初始化时,它的内容就为nil。
a = {}
a[10000] = 1
print(table.maxn(a)) -- >10000
15、在Lua5.1中,长度操作符”#‘用于返回一个数组或线性表的最后一个索引值(或其大小)
16、table.maxn将返回一个table的最大索引数
17、注意数字0和字符“0”做索引为不同索引
18、function(函数)
lua中,函数是作为"第一类值"来看待的。表示函数可以存储在变量中,可以通过参数传递给其他函数,还可以作为其他函数的返回值。