1.什么是Lua语言
Lua是一种轻量小巧的脚本语言,用标准的C语言编写并以源代码形式开放,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能
2.Lua特性
轻量级,可扩展
注释
单行注释--
多行注释 --[[内容]]--
变量
默认是全局变量,可以访问没有赋值的全局变量
例如:a = 100
删除一个变量可以将其设置为nil
nil: 表示一个无效值(在条件中==false) [比较和nil是否相同时加"或'引号将nill值包裹起来]
boolean: 布尔值包含true和false
number: 数字,表示双精度类型的实浮点数
string: 表示字符串,用单引号或双引号表示
function: 用C或者Lua编写的程序
table: 字典,在Lua可以通过{}来创建
thread: 表示独立线路,用于执行程序
userdata: 变量中表示任何存储在C的数据结构
全局(默认)
格式: 变量名 = 值
局部
格式: local 变量名 = 值
注意:只要变量前没有local全是全局变量
1.while循环
当条件满足为true时,执行执行体内容
格式: while(条件)
do
执行体
end
2.for循环
数值for循环
判断var等于a1或a2或a3则执行执行体内容
格式: for var=a1,a2,a3
do
执行体
end
泛型for循环
a = {"a", "b"}
for i, v in ipairs(a) do
print(i, v)
end
运行结果: 1 a
2 b
3.repeat..until循环
重复执行循环直到指定的条件为true为止
格式: repeat
执行体
until(条件)
break:退出当前循环或语句
goto:控制流程无条件地转到被标记的语句处。
语法格式如下所示:
goto Label
Label 的格式为:
:: Label ::
实例:
local a = 1
::label:: print("我跳过来了")
a = a+1
if a < 3 then
goto label -- a 小于 3 的时候跳转到标签 label
end
运行结果: 我跳过来了
我跳过来了
函数定义的格式:
optional_function_scope function function_name(arg1,arg2....)
function_body
return result_params_comma_separated
end
optional_function_scope: 该参数是可选的自定义函数是全局函数还是局部函数,未设置该参数默认为全局函数,
如果你需要设置为局部函使用关键字local
arg1,arg2: 函数参数,多个参数以逗号隔开,函数也可以不带参数,...为可变参数
function_body: 函数体,函数中需要执行的代码语句
result_params_comma_separated: 函数返回值,Lua语言函数可以返回多个值,每个值以逗号隔开
1.获取字符串长度,在字符串前加#
例如:print(#"aa") 结果: 2
2.字符串之间的连接是..
例如: print(a..b) 结果: ab
3.字符串的表达方式有单引号/双引号/[[内容]]
例如: s1 = "Lua" s2='Lua' s3=[[Lua]]
对字符串相关操作
1. string.upper("字符串") 全变大写
2. string.lower("字符串") 全变小写
3. string.gsub(mainString,findString,replaceString,num) 字符替换
mainString: 要操作的字符串
findString: 要替换的字符串
replaceString: 要替换的字符
num: 替换次数(可以忽略,则全部替换)
4. string.find(str,substr,init) 字符查询存在,返回开始索引和结束索引
str: 源字符串
substr: 目标字符串
init: 从什么位置开始查询
5. string.reverse("字符串") 字符串反转
6. string.format("字符串") 返回类似printf格式化字符串
7. string.len("字符串") 返回字符串的长度
8. string.rep("字符串",n) n个拷贝字符串
9. string.sub(s,i,j) 字符串的截取
s: 要截取的字符串
i: 起始下标
j: 结束下标,默认为-1
10. string.byte("字符串")/string.char(数值) 字符串和数值相互转换
byte("字符串",位置) 默认选取第一个
arr = {"a1","a2"}
for i=0,2 do
print(arr[i])
end
-- 其中i的取值(0,1,2)
-- Lua索引从1开始,取不到值为nil
运行结果: nil
a1
a2
-- for循环迭代器
for k,v in pairs(t)
print(k,v)
end
-- ipairs: 迭代数组,不能返回 nil,如果遇到 nil 则退出
1.表的构建
-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
-- 移除引用
mytable = nil
--lua 垃圾回收会释放内存
2.表的操作
table.concat(table,sep,start,end) 连接表中所有元素
table: 要连接的表名
sep: 表中元素连接起来的分割符(可以没有)
start: 连接表中元素的初始位置(默认为1)
end: 连接表中元素最后位置(默认为-1)
table.insert(table,pos,value) 指定位置插入
table: 要插入的表名
pos: 指定位置插入value的值,(默认插入数组末尾)
table.removetable,pos,value) 指定位置删除(同插入一样)
table.getn(字典名) 获取字典长度
或者# 实例:print(#字典名)
模块:
模块类似于一个封装库,可以把一些公用的代码放在一个文件里,以 API 接口的形式在其他地方调用
有利于代码的重用和降低代码耦合度。
require 函数加载模块
require("<模块名>")
或者
require "<模块名>"