Lua的是动态类型语言,使用时不需要被定义类型,可以直接给变量赋值,在我的理解就是,你给变量赋的值的类型就是该变量的类型。
以下是Lua中得变量类型:
变量类型描述nil
表示一个无效值,在逻辑判断语句中表示:false,当一个变量没有被赋值的时候他的值就是nilboolean 包含两个值:false和true,类似于C++中的布尔变量 number表示双精度类型的浮点数string表示字符串,由单引号或者双引号来表示function用来定义函数变量,比如:function add(),就表示定义一个名字叫做:add的函数userdata表示在C中或者Lua中用户自己定义的数据类型thread表示执行的独立线路table在Lua中table表示一个关联数组,数组的下标通常从1开始,也有表示key-value的键值对如果不太理解,我们也可以使用type函数来查看一下当前变量的数据类型:
print(type(a)) --因为此时变量a没有被赋值,所以他的值就是:nil print(type(true)) printf(type(10.0)) print(type("hello world")) print(type(type)) --type本身就是一个用来测试变量类型的函数,所以type的类型就是function备注:在Lua中,单行注释使用:-- 多行注释使用:--[[ ........注释...... --]]
因为我们没有给变量x赋值,所以x里面就是nil,输出x,结果就是:nil。
我们如果需要使用type函数来判断某个变量的值是不是nil,需要给nil加上双引号,因为type的输出结果是字符串,如下:
print(type(x)) == nil >> false print(type(x)) == "nil" >> trueboolean里面只有两个值:false和true
以下几个数字都可以看做是number类型:2, 2.2, 0.2, 2e+1
可以用双引号来表示一小段字符串,也可以用:[[ ]]来表示一堆字符串,如下:
string1 = "this is string1" longstring = [[ #include <iostream> using namespace std; int main(int argc,char* argv,int envop) { returen 0; } ]] print(string1) print(longstring)对于数字字符串,Lua会尝试将数字字符串转化成数字:
print("2"+6) >> 8 print("3"+7) >> 10对于字符串的拼接,Lua中使用的是:' .. ',
print("123".."456") >> 123456 print("hello".."world") >> helloworld直接创建一个表:
table = {}创建并初始化一个表:
table = {"one","two","three","four","five"}表的索引可以是数字也可以是字符串:
table = {} table["key"] = "value" key = 10 table[key] = 22此时我们如果通过循环结构去遍历这个关联数组的时候,既可以通过key来访问对应的值,也可以通过字符串"key"来访问对应的值,给表赋值的时候,我们可以把这个表当做一个栈,先被赋值的在栈底,索引数字为:1。
而且table的长度是可以自动变化的,你尽管向里面添加数据就行。
一个简单的没有参数的打印函数:
function Print() print("hello world") end一个有参数的计算两个数字和的函数:
function Add(a,b) return a+b end print(Add(1,2))函数的复制: function Add(a,b) return a+b end print(Add(1,2)) Add2 = Add print(Add2(1,2))匿名函数:
function testfun(tab,fun) for k,v in pairs(tab) do print(fun(k,v)) end end table = {key1="one",key2="two",key3="three"} testfun(table, function(k,v) print(k..":"..v) end )在testfun的第二个参数里面,直接写了一个函数供其调用,此时也就不用函数名字了这个是用户自己定义的数据类型,可以将C++中得任意数据类型储存到Lua的变量中,通常是struct结构体和指针。
在 Lua 里,最主要的线程是协同程序。它跟线程差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起时才会暂停。