Lua 介绍
轻量的脚本语言,C编写的。嵌入到应用程序中达到扩展程序功能的效果。
Lua 提供交互式编程方式,但我们使用居多的是脚本式编程,把把Lua程序保存在以lua结尾的文件中。
为什么要了解Lua ?
- redis 的多条命令,原子性操作可以使用Lua 写
- Nginx 处理业务可以使用Lua写
Lua 基础
Lua的注释
--[[
多行注释
多行注释
--]]
Lua 标志符
A-Z , a-z,0-9,下划线_,其他特殊符号不在其内
注意 : 下划线_加大写字母,是Lua的保留字,不推荐使用
Lua 语言是大小写区分,不能以数字开头
Lua 的保留字(关键字)
and , or , not ,
do , end , while , for , in ,
if , then , else , elseif ,
false , true , nil ,
function , return ,
repeat , until ,
local ,
break , goto
变量作用域
全局变量 本地变量
默认的变量是全局变量, 如 a=3 -- 全局变量
本地变量 local 变量名,如 local b=1 -- 局部变量
Lua 变量申明
-- xp.lua 文件 如下 :
a=5 -- 全局变量
local b = 10 -- 局部变量
Lua 数据类型
nil
boolean
number
string
function
userdata
thread
table
Lua 循环
- for循环
- while循环
- repeat until 循环
while 循环
while (condition)
do
语句
语句
end
for 循环
for i=1,5,1
i=i+1
end
repeat until 循环
a = 10
repeat
a=a+1
until (a > 10)
end
Lua 循环控制语句
- break 语句
- goto 语句
Lua 控制语句
if else 语句 如下:
if(condition)
then
语句
语句
else
语句
语句
end
if elseif 语句如下:
if(condition)
then
语句
语句
elseif(condotion2)
then
语句
语句
else
语句
语句
end
Lua 函数定义
函数定义格式 :
修饰符 function 函数名(参数,参数, ... 参数)
函数体
return 返回值
end
Lua 函数修饰符 默认是全局的,局部函数使用关键字 local 修饰
Lua 函数的返回值,可以是一个,也可以是多个,多个时候使用逗号","隔开
Lua 函数的可变参数 使用三个点 ... ,可变参数在提一个函数的入参中要放在最后
Lua 提供了很多内建函数
Lua 运算符
算术运算符
+
-
*
/
%
^
-
//
关系运算符号
==
~=
>
<
<=
>=
逻辑运算符
and
or
not
Lua 的 其他运算符
.. 连接运算符,2个字符串拼接
# 一元运算符,返回字符串或者表的长度
运算符优先级别,从高到低
^
not - (符号)
* / %
+ -
..
< > <= >= ~= ==
and
or
Lua 字符串操作
3 种方式定义字符串
s ="Lua" -- 双引号方式 "
v = 'Lua' -- 单引号方式 '
k =[[Lua]] -- [[]] 方式
转义字符
-- 不展示了
string的内建函数
string.upper(arg)
string.lower(arg)
string.gsub(s,t,r,num) -- s要操作的字符串 t 目标字符串 r 要替换的字符串 num 可选 替换num个 确实全替换
string.find(s,sub,init,end)
string,reverse(arg)
string.format(...) -- 如 string.format("value is%s","LUa")
-- string.format("size is %d",10)
string.cahr 和 string.byte
string.len(arg)
string(str,n) -- string.rep("xp,2) 返回的结果是 xpxpxp, 复制2次
.. 自测串拼接
tring.gmatch(s,pattern)
string.match(s,pattern,n)
string.sub(s,i,j)
Lua 数组
arr = {1,2,4} Lua 数组索引默认从1开始,可以自行指定
Lua 迭代器
for 迭代器
for k , v in pairs(t)
do
语句
end
-- 如下示例
arr ={"a","b","c"}
for idx , value in pairs(arr)
do
print(idx,value)
end
-- 输出结果如下
a
b
c
无状态迭代器
多状态迭代器
Lua 表(table)
table 定义
mt ={}
mt[1] = "Lua"
mt = nil
table 内建函数
table.concat
table.insert
table.maxn
table.remove
table.sort
Lua 模块和包
模块定义
-- 定义一个名为md的模块
md = {}
md.cst="XP" -- 定义一个常量
function f1()
print("func f1")
end
local function f2()
print("local func f2")
end
引用模块
require("md") -- 引用md模块
local pmd require("md") -- 引用md 模块并起个别名,发布使用
require函数的加载策略 package.path
package.loadfile 加载目标文件,先找Lua,没找到会找C程序库
C包
TODO 待补充 rd time 2022-6-2
参考 : www.runoob.com/lua/lua-tut…
TODO