Lua
概述
1、设计目的:嵌入到其他应用程序中,从而为应用程序提供灵活的扩展和定制功能
2、特性
(1)轻量级:轻量、小巧的脚本语言,标准 C 语言编写,并以源代码形式开发,方便嵌入到其他程序中
(2)可扩展:提供丰富、易用的扩展接口、机制,由宿主语言(C/C++)提供功能
(3)支持面向过程编程、函数式编程
Linux 安装
1、下载
(1)-R / --remote-time:在本地生成文件时,保留远程文件时间
(2)-O / --remote-name:把输出写到该文件中,保留远程文件的文件名
curl -R -O http://www.lua.org/ftp/lua-5.4.4.tar.gz
2、解压
tar zxf lua-5.4.4.tar.gz
3、切换目录
cd lua-5.4.4
4、编译所有程序、并检查
make all test
5、安装
make install
语法
1、交互式
(1)在命令行输入程序,然后回车就可以看到运行的效果
(2)通过命令 lua -i 或 lua 启用
2、脚本式
(1)将代码保存到一个以 .lua 为扩展名的文件中
(2).lua 首行添加 #!/usr/local/bin/lua,指定程序运行该文件
(3).lua 不是一个可执行文件,需要通过 chmod 设置可执行权限
3、在交互式中,运行脚本式 .lua 文件,可以使用 dofile(filename) 函数
4、连续语句之间的分隔符 ; 可选
5、表达式之间的换行不起任何作用
注释
1、单行注释
--注释内容
2、多行注释
--[[
注释内容
--]]
3、取消多行注释
---[[
注释内容
--]]
标识符
1、即变量名
2、Lua 定义变量名
(1)以一个字母 A 到 Z,或 a 到 z,或下划线开头
(2)后面加上 0 个或多个字母,下划线,数字(0 到 9)
3、不使用下划线 + 大写字母的标识符,因为容易与 Lua 保留字发生冲突
4、区分大小写字母
5、关键字:and、break、do、else、elseif、end、false、for、function、if、in、local、nil、not、or、repeat、return、then、true、until、while、goto
6、一般约定,以下划线开头连接大写字母,被保留用于 Lua 内部全局变量
算术运算符
1、+:加
2、-:减
3、*:乘
4、/:除
5、%:取余
6、^:乘幂
7、-:负号
关系运算符
1、==:等于
2、~=:不等于
3、>:大于
4、<:小于
5、>=:大于等于
6、<=:小于等于
逻辑运算符
1、and:逻辑与,&&
2、or:逻辑或,||
3、not:逻辑非,取反
其他运算符
1、..:连接两个字符串
2、#:一元运算符,返回字符串或表的长度
变量
1、全局变量无须声明,即可使用
2、在默认情况下,变量总为全局
3、如果未提前赋值,默认为 nil
4、声明一个局部变量,需要使用 local 声明
数据类型
1、nil:空,无效值
2、boolean:true / false
3、number:数值
4、string:字符串
5、function:函数
6、table:表
7、thread:线程
8、userdata:用户数据
nil
1、只有一个 nil 值
2、作用
(1)与其他所有值进行区分
(2)当想要移除一个变量时,只需要将该变量名赋值为 nil,垃圾回收会释放该变量所占用的内存
boolean
1、true、false
2、用作条件判断的真与假
3、在 Lua 中,只将 false 和 nil 视为假,其他的都视为真(包括 0 和空字符串)
number
1、Lua 5.3 版本开始,为数值格式提供两种选择
(1)integer:整型
(2)float:双精度浮点型
2、不管是整型还是双精度浮点型,使用 type() 函数获取其类型,都会返回 number
3、两者之间可以相互转换
4、具有相同算术值的整型值、浮点型值,在 Lua 语言中相等
string
1、使用 '' 或 "" 声明字符串
2、如果声明的字符串较长,或有多行,则可以使用 [[ ]] 声明
table
1、Lua 以一种简单、统一、高效方式,表示数组、集合、记录、其他数据结构
2、Lua 中的表本质上是一种辅助数组,除 nil 以外,可以使用任意类型的值作索引
3、例
(1)创建空表
a = {}
(2)获取值,数组下标默认从 1 开始
arr[1]
arr["X"]
arr.X
(3)同时声明索引、值
arr = {"TOM",X=10,"JERRY",Y=20,"ROSE",Z=30}
function
1、在 Lua 中,函数对语句和表达式进行抽象
2、定义函数
function functionName(params)
end
3、函数被调用时,传入参数个数与定义函数时使用参数个数不一致,Lua 会通过抛弃多余参数,将不足的参数设为 nil,调整参数的个数
4、可变长参数函数
function functionName(...)
end
5、函数可以返回多个值
thread
1、线程
2、在 Lua 中,thread 表示执行的独立线路,用来执行协同程序
userdata
1、用户自定义数据
2、表示一种由应用程序,或 C/C++ 语言库所创建的类型
if then elseif else
1、else 可选
if(布尔表达式)
then
--[ 在布尔表达式为 true 时执行的语句 --]
end
if(布尔表达式)
then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
2、允许嵌套 if 语句
if(布尔表达式1)
then
--[ 布尔表达式 1 为 true 时执行该语句块 --]
if(布尔表达式2)
then
--[ 布尔表达式 2 为 true 时执行该语句块 --]
end
end
if(布尔表达式1)
then
--[ 布尔表达式 1 为 true 时执行该语句块 --]
elseif(布尔表达式2)
then
--[ 布尔表达式 2 为 true 时执行该语句块 --]
end
while
1、先判断,后执行
while(condition)
do
statements
end
repeat
1、先执行,后判断,循环体至少会执行一次
repeat
statements
until(condition)
for
1、数值 for 循环
(1)var 从 exp1 变化到 exp2
(2)每次变化以 exp3 为步长,递增 var,并执行一次执行体
(3)exp3 可选,如果不指定,默认为 1
for var=exp1,exp2,exp3 do
<执行体>
end
2、泛型 for 循环
(1)通过一个迭代器函数,遍历所有值,类似 Java 中的 foreach
(2)i:数组索引值
(3)v:对应索引的数组元素值
(4)ipairs:Lua 提供的一个迭代器函数,用来迭代数组
(5)a:要遍历的数组
for i,v in ipairs(a) do
循环体
end
3、如果 key 为非数字,使用 pairs 迭代
(1)ipairs:仅遍历值,按照索引升序遍历,索引中断停止遍历,即不能返回 nil,只能返回数字 0,如果遇到 nil 则退出,它只能遍历到集合中第一个不是整数的 key
(2)pairs:能遍历集合的所有元素,即 pairs 可以遍历集合中所有 key,并且除了迭代器本身以及遍历表本身,还可以返回 nil
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战