Lua的数据类型

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中,单行注释使用:--               多行注释使用:--[[   ........注释......    --]]

nil(空)

print(x)
out: nil

因为我们没有给变量x赋值,所以x里面就是nil,输出x,结果就是:nil。

我们如果需要使用type函数来判断某个变量的值是不是nil,需要给nil加上双引号,因为type的输出结果是字符串,如下:

print(type(x)) == nil
>> false
print(type(x)) == "nil"
>> true

boolean和number

boolean里面只有两个值:false和true

以下几个数字都可以看做是number类型:2,   2.2,   0.2, 2e+1

string

可以用双引号来表示一小段字符串,也可以用:[[  ]]来表示一堆字符串,如下:

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 = {}

创建并初始化一个表:

table = {"one","two","three","four","five"}

表的索引可以是数字也可以是字符串:

table = {}
table["key"] = "value" 
key = 10
table[key] = 22

此时我们如果通过循环结构去遍历这个关联数组的时候,既可以通过key来访问对应的值,也可以通过字符串"key"来访问对应的值,给表赋值的时候,我们可以把这个表当做一个栈,先被赋值的在栈底,索引数字为:1。

而且table的长度是可以自动变化的,你尽管向里面添加数据就行。

function(函数)

一个简单的没有参数的打印函数:

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的第二个参数里面,直接写了一个函数供其调用,此时也就不用函数名字了

userdata

这个是用户自己定义的数据类型,可以将C++中得任意数据类型储存到Lua的变量中,通常是struct结构体和指针。

thread(线程)

在 Lua 里,最主要的线程是协同程序。它跟线程差不多,拥有自己独立的栈、局部变量和指令指针,可以跟其他协同程序共享全局变量和其他大部分东西。线程跟协程的区别:线程可以同时多个运行,而协程任意时刻只能运行一个,并且处于运行状态的协程只有被挂起时才会暂停。

你可能感兴趣的:(Lua)