什么是Lua,它时用来干什么的?

lua语言是一门十分小巧的语言。他的优势是在于十分的小巧和灵活。单也是正式因为这种灵活,导致lua有很多地方的逻辑不尽严谨。
Lua脚本可以很容易的被C/C++ 代码调用,也可以反过来调用C/C++的函数,这使得Lua在应用程序中可以被广泛应用。不仅仅作为扩展脚本,
也可以作为普通的配置文件,代替XML,ini等文件格式,并且更容易理解和维护。

LUA语言的各种方法

我们先从最简单注释和学习代码最常用的一句话(HELLO WORLD)开始。

lua的注释和c++,c#等不是//这点要注意,我们直接来看代码会直观一点。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

print("HELLO WORLD");
print("lua语言的学习");
--这是注释哦

--[[
这不和c#玩全不一样嘛!!!
再来一行
]]
--[[
这不和c#玩全不一样嘛!!!
再来一行
]]--
--[[
这不和c#玩全不一样嘛!!!
再来一行
--]]


既然作为一种语言,各种变量肯定是必不可少的。

我们先从一些简单的入手,复杂的变量类型我们一会再说。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
print("***************变量********************");
--lua中的简单变量类型
--nil number string boolean
--lua中所有的变量声明 都不需要声明变量类型 会自动判断 类似于 var
--lua中的变量可以随便赋值 会自动识别类型
--lua中使用没有声明的变量 不会报错默认值为空
print(b);
--通过type函数我们可以得到变量类型



--nil类似于c#中的null
print("*********************nil****************");
a = nil
print(a);
print(type(a));
--number 所有的数值都是number
print("*******************number******************");
a = 1;
print(a);
print(type(a));
a=1.2;
print(a);
print(type(a));
print("*******************string******************");
a = "123";
print(a);
a='12345';
print(a);
--字符串的声明 是用单引号或者双引号包裹
--lua里没有char

print("*******************boolean******************");

a= true;
print(a);
a =false;
print(a);



--复杂数据类型
--函数 function
--表 table
--数据结构 userdata
--协同程序 thread(线程)

字符串作为lua语言中的重要变量,有很多的小方法可以供程序员使用

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
print("*************字符串*************");
str = "双引号字符串";
str = '单引号';

--获取字符串长度
print("********************字符串长度**************");
s ="dasdas";
--中文字符占三个字符串长度
--英文字符占一个
print(#s);

print("********************字符串多行打印**************");
--lua中也是支持转义字符
print("123\n123");
s =[[123
456
678
]]
print (s);
print("********************字符串拼接**************");
--字符串拼接通过..
print("123".."456")
s1 ="123";
s2 ="456";
s3 = 1;
print(s1 ..s2..s3);

print(string.format("我是谁?我是%d",s1));
--%d :与数字拼接
--%a 与任何字符拼接
--%s 与字符配对
-- ......
print ("******别的类型转换字符串**************")
a =true;
print(tostring(a));

print("*****************字符串提供的公共方法***********")
str ="abcQWE"
--小写转大写的方法
--转换并不会改变原本的字符串
print(string.upper(str));
--大写转小写(string.lower(str));
print(string.lower(str));
--反转字符串
print(string.reverse(str));
--字符串索引查找
print(string.find(str,"a"));
--截取字符串
print(string.sub(str,3));
--字符串重复
print(string.rep(str,2));
--字符串修改
print(string.gsub(str,"ab","12"));--参数里面的1是指修改了多少次


--字符转ASCII码
print(string.byte("Lua",3));
a = string.byte("Lua",3);
print(a)
--ASCII转字符串

print(string.char(a));

运算符,是所有语言中都不可或缺的东西,让我们来看看lua语言中的运算符吧。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
print("********运算符*********")

print("*******算数运算符**********")
-- +-*/%
-- 没有自增自减
-- 没有符合运算符 += -= /= *= %=
-- 字符串 可以进行算数运算符操作 会自动转换成number
print("加法运算"..1+1)
a =1
b =2
print(a+b);
print("123.4" +1)
print("减法运算"..1-2)
print("123.4" -1)
print("乘法法运算"..3*4)
print("123.4" *3)
print("除法运算"..1/2)
print("123.4" /2)
print("取余运算"..1%2)
print("123.4" %2)
-- ^lua中该符号是幂运算
print("幂运算"..3^2)
print("*****条件运算符*******")
-- > = < >= <= == ~=
print(3>1)
print(3<1)
print(3>=1)
print(3<=1)
print(3==1)
print(3~=1)
print("******逻辑运算符********");
-- && || ! "短路"
-- and or not
print(true and false)
print(true and true)
print(true or false)
print(false or false)
--了解就行了,你要是这么写估计会被交接的人打死
print(not true)
--所为短路就是前面的ffalse被执行了,后面的语句便不会在执行
print(true and print("123"));
print(false and print("123"));
print("*******位运算符******")
--不支持位运算符 需要自己去实现
print("********三目运算符*******")
-- lua也不支持三目运算符

条件分支语句

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
print("*************条件分支语句************");
a=9
--if条件then....end
--单分支
if(a ==9)then
print("123");
end

--双分支
if(a~=9)then

else
print("false")
end

--多分支语句
if a>5 then
print("123");
--lua中的elseif一定是连续的
elseif a~=9 then
print("9");
end

--lua中没有switch 需要自己实现

Lua中的各种循环语句

lua中没有自增哦!!!

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
print("*********循环语句************")
print("*********while循环************")
num = 0;
while num<5 do
print(num)
num =num +1
end
print("*********do while循环************")
--repeat.....until条件(注意:条件是结束条件)
num=0;
repeat
print (num)
num =num +1;
until num >5
print("*********for循环************")
for i=1,5 do--lua中的I默认递增
print(i)
end

for i =1,5,2 do
print(i)
end

--如果想递减 需要自己末尾添加想减掉的数字
for i =10,1,-1 do
print(i)
end
print("*********for练习************")
a = {[0] = 1, 2, [-1] = 3, 4, 5}

for i=0,4 do
print(a[i])
end

自定义方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
print("*********函数************")
--function 函数名()
--end

--a =function()
-- end
print("*********无参数无返回值************")

function F1()
print("f1")
end
F1();

--有点类似C#中的委托和事件
F2 = function()
print("f2")
end
F2();
print("*********有参数************")
function F3(a)
print(a);
end
--如果你传入的参数和函数参数个数不匹配
--不会报错 指挥补空 或者丢弃
F3(123);
F3(F2());

print("*********有返回值************")

function F4(a)
return a,true,false
end
--多返回值时,在前面申明多个变量来接取即可
--如果变量不够 不影响
temp,temp2,temp3 =F4(1)
print(temp)
print(temp2);
print(temp3);
print("*********函数的类型************")
F5 =function()
print("123")
end

print(type(F5))
print("*********函数的重载************")
--函数名相同 参数类型不同 或者参数个数不同

F7 = function()
end
F7 = function(a)
end
--lua不支持重载 默认调用最后一个声明的函数
print("*********变长参数************")

function F8(...)
--变长参数使用用一个个表存起来 再用
arg ={...}
for i=1,#arg do
print(arg[i])
end
end
F8(1,2,3,4,5,6)

print("*********函数嵌套************")

function F9()
function F0(...)
print(123);
end
return F0;

end


function F9()
ret function ()
print(123);
end


end
--闭包
--改变传入函数的生命周期

这篇文章姑且就到这里。