string number boolean(true false) nil(空值) table function thread userdata
需要注意的是lua不区分double 或者long ,只有一种number类型,也不支持long long int 这种类型,但是他的即时编译器LuaJIT支持。
和Java的String类型相似,但是不完全相同,和python也有那么一点点相似,介绍其用法。
首先是格式: 可以放在双引号之间,也可以放在单引号之间,此外也可以放在[[]]之间,最后一种用于存放那种长度比较长且中途进行过换行的字符串。
举个例子:
前面的为行号无需在意,进行输出
还有一种情况就是➕,我们知道在Java中用+可以对字符串进行一个拼接,但是在lua中已经无法这样子使用了
举例:
对此我们进行一个输出
我们发现str1 str2都是number类型,也就是说现在是一个数字而不是字符串,这个与我们所学的Java并不相同
其次我们发现字符串a与1相加时报错了,告诉我们字符串与数字不能够进行相加。
那么如何进行拼接呢? 采用的是 …来进行拼接
案例:
输出
显然现在都能正常输出,且和字符串进行拼接的效果一模一样。
table 类型可以理解为一个容器,其内部可以存放各种东西,想什么字符串、数字都可以也可以存放与自己类型相同的物品。
例如:
输出结果为:
需要注意的是,我们发现索引为0的输出的为nil也就是null,而索引为1的输出的是第一个数,这是因为lua的索引起始位置与我们常见的语言的不同,他的起始位置是1,终止位置的索引是他的长度。
数字类型就比较直接了,包含所有类型的数字,比如说int long double float 都不进行区分,而是直接归为number类,需要注意的是,不支持很大的数,如果特别大,则会报错
显然都是number 类型,同时如果过大直接成了inf,超出了限制。
其运算与其他语言的相似
print(1+2) --表示加法
print(1-2) --表示减法
print(1*2) --表示乘法
print(1/2) --表示除法
print(2^2) --表示次方
print(13//2) -- 表示除法,不保留小数
print(1>2) --大于
print(1<2) -- 小于
print(1<=2) --大于等于
print(1<=2) --小于等于
print(1~=2) --不等于
这里的“–”是注释,这个注释与Java python的注释不同
声明方式: function 函数名(参数) 内容 end
这个样式类似于JS,但是和JS不同,这个不存在大括号来划分一个作用域,而是简单的用end来表示这个函数的作用域的结束位置
案例:
function test(s)
a=1
b=2
print(s+a+b)
end
x=test(2)
函数创建的位置也需要注意,一般而言,函数的创建位置需要在调用方法之上,否则相当是调用了一个不存在的东西,直接会发生报错:
案例:
test=sum_number(1,2)
function sum_number(num1,num2)
print(num1+num2)
end
分支语句比较简单,只有一个if语句:
语法格式:
if (条件)
then 内容
elseif(内容)
then
内容
else
内容
end
案例:
a = 5
if(a>2)
then
print("是的")
elseif(a==5)
then
print(3)
else
print("????")
end
循环语句和其他的语言看起来相似,不同的是在while循环中还存在着do,这和Java的区别就很大:
while循环格式:
while(条件体)
do
内容
end
案例:
a=5;
while(a<10)
do
a=a+1;
b=a;
print('b='..b)
end
for格式:
for i=起始,终止,步长 do
内容
end
类似与python的格式,
案例:
for i=1,20,2
do
print('i='..i)
end
在一个table中的数据可以通过此形式进行一个循环
for i,v in ipairs(table_name) do
-- body
end
案例:
table={"123","234","345","567"}
for i,v in ipairs(table) do
print("index"..i..":= "..v)
end