Lua的是动态类型语言,使用时不需要被定义类型,可以直接给变量赋值,在我的理解就是,你给变量赋的值的类型就是该变量的类型。
以下是Lua中得变量类型:
变量类型 | 描述 |
nil |
表示一个无效值,在逻辑判断语句中表示:false,当一个变量没有被赋值的时候他的值就是nil |
boolean | 包含两个值: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中,单行注释使用:-- 多行注释使用:--[[ ........注释...... --]]
print(x)
out: nil
因为我们没有给变量x赋值,所以x里面就是nil,输出x,结果就是:nil。
我们如果需要使用type函数来判断某个变量的值是不是nil,需要给nil加上双引号,因为type的输出结果是字符串,如下:
print(type(x)) == nil
>> false
print(type(x)) == "nil"
>> true
boolean里面只有两个值:false和true
以下几个数字都可以看做是number类型:2, 2.2, 0.2, 2e+1
可以用双引号来表示一小段字符串,也可以用:[[ ]]来表示一堆字符串,如下:
string1 = "this is string1"
longstring = [[
#include
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 里,最主要的线程是协同程序。它跟线程差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起时才会暂停。