lua是动态类型语言,变量不需要类型定义,只需要为变量赋值

lua有8中基本类型:nil、boolean、number、string、userdata、function、thread和table

nil

nil类型化表示没有任何有效值(类似于null?)

对于全局变量和table,nil有一个删除作用,给全局变量或者table表里的一个变量赋值为nil,就等同于删掉它们。

nil做比较时应该加双引号

number

lua默认为double类型

string

string类型用双引号或者单引号表示,也可以用两个方括号来表示一块字符串

e = [[it's mine!
it's not yours! --'Oh' --"Wow!!!!"
]]
print (e) --输出[[]]里面的所有内容

在对一个数字字符串上进行算数操作的时候,lua会尝试将这个数字字符串转换成一个数字然后计算,两个字符串连接使用的是..,例如:

print("a" .. "b") --ab
print(123 .. 456) -- 123456

table

在lua里,table的创建是通过构造表达式来完成,即直接用{}来创建一个表,lua中的表其实是一个关联数组,数组的索引可以使数字或字符串

a = {}
a["key"] = "value"
key = 10
a[key] = 22
a[key] = a[key] + 11
for k, v in pairs(a) do
print(k .. " : " .. v)
end

执行脚本输出结果为

key : value
10 : 33

在lua中,表的默认初始索引一般从1开始,当有新数据添加时,table的长度会自动增长,获取未初始化的table会返回nil

function

在lua中,函数可以被储存在变量中,也可以通过匿名函数的方式通过参数传递

function testFun(tab,fun)
for k ,v in pairs(tab) do
print(fun(k,v));
end
end


tab={key1="val1",key2="val2"};
testFun(tab,
function(key,val)--匿名函数
return key.."="..val;
end
);

thread

在lua中,最主要的现场是协程,拥有自己独立的栈、局部变量和指令指针,可以和其他的协程共享全局变量和其他大部分东西。

线程和协程的区别:线程可以多个同时运行,而协程在任意时刻只能运行一个

userdata

用户自定义数据,可以将C/C++的任意类型的数据存储到lua变量中调用