Lua语言-redis、nginx

265 阅读3分钟

Lua 介绍

轻量的脚本语言,C编写的。嵌入到应用程序中达到扩展程序功能的效果。

Lua 提供交互式编程方式,但我们使用居多的是脚本式编程,把把Lua程序保存在以lua结尾的文件中。

为什么要了解Lua ?

  1. redis 的多条命令,原子性操作可以使用Lua 写
  2. 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 循环

  1. for循环
  2. while循环
  3. 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