lua脚本学习

2024-07-31  本文已影响0人  温岭夹糕

目录

链接地址

1.环境安装

lua官网linux源码安装教程

curl -L -R -O https://www.lua.org/ftp/lua-5.4.7.tar.gz
tar zxf lua-5.4.7.tar.gz
cd lua-5.4.7
make all test

测试安装

lua -v
//或者
lua -i

2.快速上手

2.1注释

单行

--

多行

--[[
 多行注释
 多行注释
 --]]

2.1变量

使用print函数打印
默认情况下,变量总认为是全局,变量默认值为nil

> b=10
> print(b)
10
>print(a)
nil

哪怕是语句块或函数都是,下面是定义并执行了hi函数,然后输出c=5

> function hi()
>>   c=5
>> end
> hi()
> print(c)
5

局部变量需要使用local显式声明

> function hi()
>>  local c=5
>>  d=1
>> end
> hi()
> print(c,d)
nil 1

语句赋值和go相似,支持swap赋值

> a,b=1,2
> b,a=a,b
> print(a,b)
2   1

有 8 个基本类型分别为:nil、boolean、number、string、userdata、function、thread 和 table
其中table表可以理解为一个关联数组(map),使用[]或点符号来访问元素

> tb = {}
> tb["a"]=1
> tb["b"]=2
> print(tb["a"])
1
> print(tb.b)
2
> for key,val in pairs(tb) do
>>   print(key,val)
>> end
a   1
b   2

与go的map不同的是这个下标是可以数字和字符串混合的

2.2 循环

while循环

while(condition)
do
   statements
end

for 循环类似python,下面意思表示var 从exp1变化到exp2,每次变化exp3步长,适用于数字

for var=exp1,exp2,exp3 do  
    <执行体>  
end  

如果是table类型需要借助ipairs函数,类似go for range循环

a = {"one", "two", "three"}
for i, v in ipairs(a) do
    print(i, v)
end 

repeat循环类似其他语言的do while语法,只是until是停止条件

repeat
   statements
until( condition )

同时循环也可嵌套

2.4流程控制

if语句

if( 布尔表达式 1)
then
   --[ 在布尔表达式 1 为 true 时执行该语句块 --]

elseif( 布尔表达式 2)
then
   --[ 在布尔表达式 2 为 true 时执行该语句块 --]

elseif( 布尔表达式 3)
then
   --[ 在布尔表达式 3 为 true 时执行该语句块 --]
else 
   --[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
end

2.5函数

lua的函数可以和go类似可以有多个返回值,用end表示结束,支持可变参数

function add(...)  
local s = 0  
  for i, v in ipairs{...} do   --> {...} 表示一个由所有变长参数构成的数组  
    s = s + v  
  end  
  return s  
end  
print(add(3,4,5,6,7))  --->25

2.5运算符

区别于go:

~=

3.Redis中使用lua脚本

3.1首要注意

Lua脚本在Redis中是以原子方式执行的,在Redis服务器执行EVAL命令时,在命令执行完毕并向调用者返回结果之前,只会执行当前命令指定的Lua脚本包含的所有逻辑,其它客户端发送的命令将被阻塞
因此实际使用lua进行redis命令编写中:

3.2EVAL命令

redis使用eval命令执行lua脚本

EVAL luascript numkeys key [key ...] arg [arg ...]
上一篇 下一篇

猜你喜欢

热点阅读