lua内置8种类型:nil, boolean, number, string, userdata, function, thread, table
nil:
nil只与nil相等,所有全局变量的默认值为nil,
将nil赋值给变量相当于将变量删除
boolean:
boolean 只有两值,true, false;在条件判断中除了
false/nil被认为是false外,其余都被认为是true,
0也是true
number:
number类型用于表示实数,lua中没有整形类型,所有number不会进行四舍五入
a % b == a - math.floor(a/b) * b
这样就能
保证求与的结果很b的正负号一致,在lua中,所有数字类型都是double,所以a/b的结果也是double,
求与是因为经过数学函数处理,才得到整数的。数学库:math
string:
lua的字符串值是不可变的,使用单引号或双引号引用,可以包含C语言中的转义字符,跨行字符串用
[[ ]]来引用
print(type(a)) 可以打印a的类型,type()函数的返回值是字符串
字符串连接操作符 ..
print("hello".."world") -->hello world
print(1..0) -->10
字符串连接操作符遇到任何参数为数字,都把它转换为字符串
table:
在Lua中,你可以用任意类型的值来作数组的索引,但这个值不能是 nil。同样,
你也可以用任意类型的值来作数组的内容,nil也可以
注意三点:
第一,所有元素之间,总是用逗号 "," 隔开;
第二,所有索引值都需要用 "["和"]" 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引
第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从 1往后编;
第一,所有元素之间,总是用逗号 "," 隔开;
第二,所有索引值都需要用 "["和"]" 括起来;如果是字符串,还可以去掉引号和中括号; 即如果没有[]括起,则认为是字符串索引
第三,如果不写索引,则索引就会被认为是数字,并按顺序自动从 1往后编;
days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}
默认索引是从1开始的:
print(days[1]) ---Sunday
print(days[#days]) ---Saturday,
#days表示table连续索引的最大值,不包含非连续值
a = {"x","y"} -- a = {[1]="x", [2]="y"}
a.x = 10 -- a["x"] = 10
#通过for k, v in pairs(a) do ... end 来遍历准确些
a = {}; b = {}
print(a == b) -- false
a = {] ; b = a
print(a == b) --true
通过table来实现链表:
list = nil
for line in io.lines() do
list = {next=list, value=line}
end
遍历:
tmp = list
while tmp do
print(tmp.value)
tmp = tmp.next
end
上面的例子有教学意义,但是实际很少用到
table类型可以嵌套, tmp = {{"a","b"}, "x0", "y"}