2、Lua脚本语言的简单应用

来源:互联网 发布:咕咚跑步软件下载 编辑:程序博客网 时间:2024/05/17 07:48
一、lua是什么?
轻量级、高效的、可扩展的脚本语言,易于嵌套其他语言,在redis2.6之后支持lua嵌入。它虽然不是面向对象语言,但可以做到面向对象。
二、lua的优缺点
1、减少网络开销
2、原子操作(在执行过程中不能参与其他的操作)
3、功能复用
4、编程式操作数据
三、数据类型
数据类型类型介绍
nil表示空,没赋值,有时也可以用来删除数据a=123;删除a  a=nilboolean(布尔)true|false
number(数字)表示双精度类型的实浮点数
string(字符串)单引号或者双引号括起来
table(表)lua里面的数组,map和对象,关联数组,索引从1开始{ .....};
table 的索引使用方括号 [];索引可以是字符或数字,表达的意义不一样
function(函数)用来封装某个或某些功能可以返回多个值userDate(自定义)用来保存C的API
thread(线程)用来区分独立的线程 
变量:
分为全局变量和局部变量(local),默认是全局变量,redis只支持局部变量
变量名是以字母、数字和下划线,数字不能开头,严格区分大小写。不能用关键字命名。
关键字:
andbreakdoelseelseifendfalseforfunctionifinlocalnilnotorrepeatreturnthentrueuntilwhile


注释和赋值
  1. 注释:
单行注释:是以--开头
多行注释:--[[

--]]
2、赋值
单行赋值:local a=123;
多行赋值:local a,b=123,456;
简单语句
打印语句:
print()
return 返回值;输出文件或者函数的返回值



注释和赋值
  1. 注释:
单行注释:是以--开头
多行注释:--[[

--]]
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   statementsend
2.2for循环
2.2.1数值for循环
for var=exp1,exp2[,exp3] 
do <执行体> end
参数介绍:从exp1每隔exp3循环,直到exp2,包含exp1和exp2。有默认步长,如果不指定,步长为1.
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   endendfor i,n in square,3,0do   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   endendfor element in elementIterator(array)do   print(element)end
3、repeat...util循环
repeat   statementsuntil( condition )
执行过程相当于java中的do...while循环