一、lua是什么?
轻量级、高效的、可扩展的脚本语言,易于嵌套其他语言,在redis2.6之后支持lua嵌入。它虽然不是面向对象语言,但可以做到面向对象。
二、lua的优缺点
1、减少网络开销
2、原子操作(在执行过程中不能参与其他的操作)
3、功能复用
4、编程式操作数据
三、数据类型
数据类型 | 类型介绍 | |
nil | 表示空,没赋值,有时也可以用来删除数据 | a=123;删除a a=nil |
boolean(布尔) | true|false | |
number(数字) | 表示双精度类型的实浮点数 | |
string(字符串) | 单引号或者双引号括起来 | |
table(表) | lua里面的数组,map和对象,关联数组,索引从1开始 | { .....}; table 的索引使用方括号 [];索引可以是字符或数字,表达的意义不一样 |
function(函数) | 用来封装某个或某些功能 | 可以返回多个值 |
userDate(自定义) | 用来保存C的API | |
thread(线程) | 用来区分独立的线程 |
变量:
分为全局变量和局部变量(local),默认是全局变量,redis只支持局部变量
变量名是以字母、数字和下划线,数字不能开头,严格区分大小写。不能用关键字命名。
关键字:
and | break | do | else |
elseif | end | false | for |
function | if | in | local |
nil | not | or | repeat |
return | then | true | until |
while |
注释和赋值
- 注释:
单行注释:是以--开头
多行注释:--[[
--]]
2、赋值
单行赋值:local a=123;
多行赋值:local a,b=123,456;
简单语句
打印语句:
print()
return 返回值;输出文件或者函数的返回值
注释和赋值
- 注释:
单行注释:是以--开头
多行注释:--[[
--]]
2、赋值
单行赋值:local a=123;
多行赋值:local a,b=123,456;
简单语句
打印语句:
print()
return 返回值;输出文件或者函数的返回值
操作符:
分类 | 操作符 |
数字操作符 | +,-,*,/,%,^ |
比较运算符 | ==,<;>;<=;>=;~= |
逻辑运算符 | and;or;not |
连接操作符 | .. |
长度操作符 | # |
1、if选择控制语句:
if(布尔表达式)
then
--[ 布尔表达式为 true 时执行该语句块 --]
else
--[ 布尔表达式为 false 时执行该语句块 --]
end
if(布尔表达式)
then
--[ 在布尔表达式为 true 时执行的语句 --]
end
if( 布尔表达式 1)
then
--[ 在布尔表达式 1 为 true 时执行该语句块 --]elseif( 布尔表达式 2)
then
--[ 在布尔表达式 2 为 true 时执行该语句块 --]elseif( 布尔表达式 3)
then
--[ 在布尔表达式 3 为 true 时执行该语句块 --]else
--[ 如果以上布尔表达式都不为 true 则执行该语句块 --]
end
Lua认为false和nil为假,true 和非nil为真。要注意的是Lua中 0 为 true。
2、循环结构
2.1while循环
while(condition)
do
statements
end
2.2for循环
2.2.1数值for循环
do <执行体> end 参数介绍:从exp1每隔exp3循环,直到exp2,包含exp1和exp2。有默认步长,如果不指定,步长为1.for var=exp1,exp2[,exp3]
2.2.2泛型for循环
for 参数列表 in 迭代器
do
<执行体>
end
迭代器:
先介绍下lua提供的两种迭代器:
- pairs():迭代 table,可以遍历表中所有的 key 可以返回 nil
- ipairs():迭代数组,不能返回 nil,如果遇到 nil 则退出
function square(iteratorMaxCount,currentNumber)
if currentNumber<iteratorMaxCount
then
currentNumber = currentNumber+1
return currentNumber, currentNumber*currentNumber
end
end
for i,n in square,3,0
do
print(i,n)
end
注意:调用迭代器的方式是:迭代器名,传入参数列表(
square,3,0
)。
关于详细的lua迭代器的分类还有一种是用闭包封装:
function elementIterator (collection)
local index = 0
local count = #collection
-- 闭包函数
return function ()
index = index + 1
if index <= count
then
-- 返回迭代器的当前元素
return collection[index]
end
end
end
for element in elementIterator(array)
do
print(element)
end
3、repeat...util循环
repeat
statements
until( condition )
执行过程相当于java中的do...while循环