当前位置:网站首页>脚本语言Lua的基础知识总结
脚本语言Lua的基础知识总结
2022-08-01 12:46:00 【dvlinker】
目录
Lua 语言是巴西里约热内卢天主教大学里的一个研究小组于 1993 年开发的,是一种轻量小巧的脚本语言,用标准C语言编写并以源代码形式开发,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。很多项目中都使用到了Lua脚本,今天我们就来介绍一下Lua的一些基础知识。
1、Lua环境安装
1.1、Windows版本安装
可以到这个地址去下载Windows版本的安装包:https://github.com/rjpcomputing/luaforwindows/releases,选择合适的windows版本安装即可。双击安装后会安装SciTE工具:
在该工具中可以编写lua脚本并运行脚本:
1.2、Linux版本的安装
下载源码包: curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz
解压:tar zxf lua-5.3.0.tar.gz
安装readline库(若未安装) :yum -y install readline-devel ncurses-devel
进入解压目录:cd lua-5.3.0
编译:make linux
安装:make install
2、Lua基础知识
2.1、基本语法
1)Lua支持交互式编程,在命令行中输入程序并立即查看效果;也支持脚本式编程,保存为后缀名为“.lua”的文件,执行脚本:lua xxx.lua,或在文件头加上#!/opt/lua-5.3.0/lua,直接执行:./xxx.lua。
2)Lua每条语句后面不必加分号“;”。
3)单行注释使用两个减号:--,多行注释使用:--[[ 多行注释]]--。
4)Lua是区分大小写的,一般以下划线开头连接一串大写字母的名字(如 _VERSION)被保留用于 Lua 内部全局变量。
2.2、数据类型
1)Lua中有8种基本类型:nil(空)、boolean、number(数字)、string、userdata(自定义类型)、function(函数)、thread和table(表),可以用type()函数来检查。
2)nil类型:表示一个无效值,它只有一个值nil。
3)boolean类型:Lua把false和nil看作是“假”,其他的都为“真”(eg:0、空字符串等为“真”)。
4)string类型:用单引号或双引号来表示,也可以用2个方括号“[[ ]]”表示“一块”字符串。
可以通过“..”作字符串连接,使用“#”来计算字符串的长度。
5)userdata类型:是用户自定义的数据,用来表示由应用程序或C语言库所创建的新类型,如:Struct和指针等。
6)function类型:函数也是一种类型,也就是所有的函数,它本身就是一个变量。
7)thread线程类型:表示执行的独立线路,用于执行协同程序。
8)tablbe类型:可看作“关联数组”,数组的索引可以是数字或者是字符串;不同于其他语言的数组把 0 作为数组的初始索引,在 Lua 里表的默认初始索引一般以 1 开始;且table不会固定长度大小,有新数据添加时其长度会自动增长;没初始化的 table 都是 nil。
2.3、变量
1)Lua是动态类型语言,变量不需要声明,不用类型定义,给一个变量赋值即创建了这个变量,访问一个没有初始化的变量也不会出错,只是得到的结果为:nil。
2)Lua中的变量除非用 local 显式声明为局部变量,否则全部是全局变量,即使变量在语句块或函数里。
3)Lua可以对多个变量同时赋值,变量列表和值列表的各个元素用逗号分开,赋值语句右边的值会依次赋给左边的变量,如:a,b,c = 1,2,3。
4)当变量个数和值的个数不一致时,Lua会一直以变量个数为基础采取以下策略:
a)变量个数 > 值的个数 ,按变量个数补足nil
b)变量个数 < 值的个数,多余的值会被忽略
2.4、运算符
1)算术运算符:+、-、*、/、%(取余)、^(乘幂)、-(负号)。
2)关系运算符:==、~=(不等于)、<=、>=、<、>。
3)逻辑运算符:and、or、not(非)。
4)连接运算符:..(连接两个字符串)。如:“hello”..“Lua” “helloLua”
5)一元运算符:#(计算表或字符串的长度)。
6)运算符优先级:^、not、-(负号)、* /、+ -、..、< > <= >= ~= ==、and、or。
2.5、循环语句
1)While循环
while conditions do statements end
其中:用do 和 end 括起来的部分为语句块,类似于C++中用"{"和"}"括起来的部分。
2)For循环
a)数值for循环for var=exp1 ,exp2 ,exp3 do loop-part end
for将用exp3作为步进值从exp1(初始值)到exp2(终止值),执行loop-part,其中步进值可以省略,默认值为1。
b)范型for循环for var1; var2 ... varN in表或者枚举函数do loop-part end
注意项:控制变量是局部变量,且不能修改其值;可以用break来终止一个循环。
3)repeat…untilrepeat statements until conditions
循环语句可以嵌套。
2.6、条件语句
if conditions then
part1
elseif conditions then
part2
else
partsend
1、Lua使用if..else执行条件控制语句
2、每条判断语句后面都要加“then”;
3、条件语句也可以进行嵌套,不支持switch语句。
2.7、函数
函数的格式如下:
funetion function_name ( arg1 ,arg2... , argn )
function_body
return result_paramsend
1)函数代码块以function关键字开头,后跟函数名、参数,以end关键字结尾。
2)Lua中除了在函数前面使用关键字local的为局部函数,其他都是全局函数。
3)result_params:函数返回值,Lua函数支持返回多个结果值,每个值以逗号隔开。
4)Lua中可以将函数作为参数传递给函数。
5)Lua 函数可以接受可变数目的参数,和 C 语言类似,在函数参数列表中使用三点 ... 表示函数有可变的参数。
2.8、模块
1)Lua模块类似于一个封装库,把一些公用的代码放在一个文件里,以API接口的形式在其他地方调用。模块也是由变量、函数等已知元素组成的table。
2)可以通过require函数来加载模块:require("<模块名>")。
2.9、文件操作
1)Lua I/O库用于读取和处理文件,分为简单模式、完全模式。
2)简单模式:拥有一个当前输入文件和一个当前输出文件,并对这些文件可以进行读写相关的操作。--打开文件,filename为文件名,mode是打开文件的方式 file = io.open (filenane , mode) --设置默认输入文件 io.input(file) --设置默认输出文件 io.output(file) --读取文件内容,param是读取的模式 io.read(param) --在文件最后一行写入内容 io.write ( "--Test--") --关闭文件 io.close(file)
3)完全模式:使用外部的文件句柄来实现。通常在需要同一时间处理多个文件时使用。
使用file:function_name代替io.function_name。--打开文件 file = io.open (filename , mode) --读取文件内容 file : read(param) --在文件最后一行写入内容 file :write("--testr--") --关闭文件 file : close (file)/
3、最后
Lua脚本的加入,使得在很多应用中既可以减少开销又可以功能复用,为应用程序提供灵活的扩展和定制功能。它也是一个轻巧的脚本语言,值得更进一步学习与应用。
边栏推荐
- MarkDown公式指导手册
- Fault 007: The dexp derivative is inexplicably interrupted
- 如何利用DevExpress控件绘制流程图?看完这篇文章就懂了!
- .NET性能优化-使用SourceGenerator-Logger记录日志
- The CAN communication standard frame and extended frame is introduced
- Pytest电商项目实战(下)
- How to integrate 3rd party service center registration into Istio?
- LeetCode_动态规划_中等_377.组合总和 Ⅳ
- 阿里云官方 Redis 开发规范
- Tencent Cloud Native: Service Mesh Practice of Areaki Mesh in the 2022 Winter Olympics Video Live Application
猜你喜欢
一文带你读懂云原生、微服务与高可用
态路小课堂丨浅谈优质光模块需要具备的条件!
程序员如何优雅地解决线上问题?
Programmer's self-cultivation
Find objects with the same property value Cumulative number Summarize
Alibaba Cloud Official Redis Development Specification
阿里云官方 Redis 开发规范
【StoneDB Class】入门第二课:StoneDB 整体架构解析
Pytest e-commerce project combat (below)
Apex installation error
随机推荐
PanGu-Coder:函数级的代码生成模型
How to Integrate Your Service Registry with Istio?
芝加哥丰田技术学院 | Leveraging Natural Supervision for Language Representation Learning and Generation(利用自然监督进行语言表示学习和生成)
CloudCompare&PCL ICP配准(点到面)
达梦更换正式授权dm.key
初级必备:单例模式的7个问题
线上问题排查常用命令,总结太全了,建议收藏!!
MNIST是什么(plist是什么意思)
[Cloud Enjoying Freshness] Community Weekly Vol.73- DTSE Tech Talk: 1 hour in-depth interpretation of SaaS application system design
windows IDEA + PHP+xdebug 断点调试
库函数的模拟实现(strlen)(strcpy)(strcat)(strcmp)(strstr)(memcpy)(memmove)(C语言)(VS)
R language fitting ARIMA model: use the auto.arima function in the forecast package to automatically search for the best parameter combination, model order (p, d, q), set the seasonal parameter to spe
CAN通信标准帧和扩展帧介绍
并发编程10大坑,你踩过几个?
Feign 从注册到调用原理分析
AI目标分割能力,无需绿幕即可实现快速视频抠图
Simulation implementation of new of Js handwritten function
高仿项目协作工具【Worktile】,从零带你一步步实现组织架构、网盘、消息、项目、审批等功能
易周金融分析 | 银行ATM机智能化改造提速;互联网贷款新规带来挑战
安全又省钱,“15岁”老小区用上管道燃气