Lua语言新手简单入门教程
一、前言
Lua是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
Lua可以应用在游戏开发、独立应用脚本、Web应用脚本、扩展和数据库插件、安全系统等场景。
笔者学习的目的主要是为了能在Web应用(Nginx、Redis)中使用到Lua脚本。
特点
- Lua脚本可以很容易的被C/C++代码调用,也可以反过来调用C/C++的函数。
- Lua由标准C编写而成,代码简洁优美,几乎在所有操作系统和平台上都可以编译,运行。
- 以极小的体积和简单的语法提供全面的功能。[一个完整的Lua解释器不过200k,在目前所有脚本引擎中,Lua的速度是最快的]
- 实现与宿主语言的简洁接口
- 成为一个很容易嵌入其它语言中使用的语言。
特性
- 支持面向对象编程
- 轻量级
- 可扩展
- 函数式编程
- 自动内存管理
- 通用类型的表–table,可实现数组,哈希表,集合,对象
- 支持闭包
- 支持多线程
- 支持交互式编程
二、安装
注意:请确保安装Lua之前系统已安装readline和readline-devel。如果没有则键入yuminstall-yreadlinereadline-devel进行安装。
curl-R-Ohttp://www.lua.org/ftp/lua-5.3.4.tar.gz tarzxflua-5.3.4.tar.gz cdlua-5.3.4 makelinuxtest
测试,命令行中键入lua-v:
Lua5.1.4Copyright(C)1994-2008Lua.org,PUC-Rio
显示Lua版本说明安装正确。
三、运行方式
与其他脚本语言一样,我们需要将Lua代码编写在文件中,后缀名为.lua。
运行该文件的代码时,只需在命令行键入luaxx.lua即可。
四、语法
4.1数据类型
Lua中包含8种基本数据类型,即:nil、boolean、number、string、userdata、function、thread和table。
数据类型 | 说明 |
---|---|
nil | 表示无效值,在条件表达式中表示false。 |
boolean | 布尔值,包含true和false两个值。 |
number | 表示双精度类型的实浮点数。 |
string | 表示字符串,通过双引号或单引号括住。 |
userdata | 表示任意存储在变量中的C数据结构 |
function | 表示C或Lua编写的函数 |
thread | 表示执行的独立线程,用于执行协同程序。 |
table | 表示一个关联数组,数组索引可以是数字或字符串。 |
例如:
a=10 str="helloworld"
不需要声明变量类型,我们可以通过type()判断变量类型。
注意:
Lua变量有三种类型:全局变量、局部变量和表中的域;
默认情况下,不管在哪声明的变量都是全局变量。通过local修饰的变量为局部变量;
变量默认值为nil。
4.2运算符
1)赋值运算符
str="hello".."world"--通过..连接字符串 a,b=10,15--a=10,b=15 c,d,e=1,2--c=1,b=2,e=nil
2)算术运算符
与其他程序设计语言类似。
a,b=10,15 c=a+b--加号 d=a-b--减号 e=a*b--乘号 f=a/b--除号 g=a%b--求余 h=a^2--求乘方 i=-a--负号
3)关系运算符
与其他程序设计语言类似。
a,b=10,15 print(a>b)--大于 print(a4)逻辑运算符
print(trueandfalse)--与 print(trueorfalse)--或 print(nottrue)--非5)其他运算符
操作符 | 说明 |
---|---|
.. | 连接两个字符串 |
# | 返回字符串或表的长度,如#“lua” |
4.3流程控制
1)条件判断,有3种写法。
--if语句 if(true) then print("hello") end --if..else语句 a,b=10,15 if(a>b) then print(a) else print(b) end --if嵌套 c=20 if(c>10) then if(c<30) then print(c) end end
2)循环,有4种写法。
类型 | 说明 |
---|---|
while循环 | 在条件为true时,让程序重复执行语句。 |
for循环 | 重复执行指定语句,重复次数在for中控制。可以遍历数字和泛型。 |
repeat..until | 重复执行循环,直到指定条件为真为止。 |
循环嵌套 | 循环内嵌套多个循环语句。 |
例如:
--while循环 a=10 while(a>0) do print(a) a=a-1 end --for循环,遍历数字 fora=1,10,1do print(a) end --repeat..until循环 a=10 repeat print(a) a=a-1 until(a<1)
4.4数组
Lua数组大小不固定且下标从1开始。
arr={"h","e","l","l","o"} --此处使用遍历数字方式 forindex=1,#arrdo print(arr[index]) end --此处使用遍历泛型方式 fori,vinipairs(arr)do print(i,v) end
4.5函数
--案例1 functioncalc(a,b,c) returna+b+c end result=calc(1,2,3) print(result) --案例2 functiongetCalc(a,b,c) returna,b,c end r1,r2,r3=getCalc(1,2,3) print(r1,r2,r3)
Lua中的函数允许返回多个值。
4.6table
table是Lua中的一个数据结构,类似于Java中的Map类型或Javascript中的JSON对象。
Luatable使用关联数组,我们可以使用任意类型值作为数组的索引,但不能是nil。
Luatable大小不固定。
person={} person.name="jack" person.age=20 print(person[1]) print(person.name) print(person["age"])
4.7模块和包
模块类似于一个封装库。从Lua5.1开始,Lua加入标准的模块管理机制,可以将一些公用的代码放在一个文件中,以API接口的形式在其他地方调用,有利于代码的重用和降低代码耦合。
Lua的模块由变量、函数等已知元素组成的table。
例如:
创建名为module.lua的文件。
module={} module.index=1 functionmodule.sum(a,b) returna+b end
另一个文件引入:
--此处module是文件名 require"module" --此处module是引入模块中定义的名称 print(module.index) print(module.sum(1,2))
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对毛票票的支持。