Lua 程序设计
Lua 是由巴西里约热内卢天主教大学(Pontifical Catholic University of Rio de Janeiro)里的一个研究小组于1993年开发的一种轻量、小巧的脚本语言,用标准 C 语言编写,其设计目的是为了嵌入应用程序中,从而为应用程序提供灵活的扩展和定制功能。
官网:http://www.lua.org/
Redis 在 2.6 版本中推出了脚本功能,允许开发者将 Lua 语言编写的脚本传到 Redis 中执行。使用 Lua 脚本的优点有如下几点:
- 减少网络开销:本来需要多次请求的操作,可以一次请求完成,从而节约网络开销;
- 原子操作:Redis 会将整个脚本作为一个整体执行,中间不会执行其它命令;
- 复用:客户端发送的脚本会存储在 Redis 中,从而实现脚本的复用。
Lua基础语法
hello world
print("hello world!")
保留关键字
andbreakdoelseelseifendfalseforfunctionifinlocalnilnotorrepeatreturnthentrueuntilwhile
注释
-- 两个减号是行注释--[[这是块注释这是块注释.--]]
变量
数字类型Lua的数字只有double型,64bits你可以以如下的方式表示数字num = 1024num = 3.0num = 3.1416num = 314.16e-2num = 0.31416E1num = 0xffnum = 0x56字符串可以用单引号,也可以用双引号也可以使用转义字符‘\n’ (换行),‘\r’ (回车),‘\t’ (横向制表),‘\v’ (纵向制表),‘\’ (反斜杠),‘\”‘ (双引号),以及 ‘\” (单引号)等等下面的四种方式定义了完全相同的字符串(其中的两个中括号可以用于定义有换行的字符串)a = 'alo\n123"'a = "alo\n123\""a = '\97lo\10\04923"'a = [[alo123"]]空值C语言中的NULL在Lua中是nil,比如你访问一个没有声明过的变量,就是nil布尔类型只有nil和false数字0,‘’空字符串(’\0’)都是true
作用域
lua中的变量如果没有特殊说明,全是全局变量,那怕是语句块或是函数里。变量前加local关键字的是局部变量。
控制语句
while循环local i = 0local max = 10while i <= max doprint(i)i = i +1endif-elselocal function main()local age = 140local sex = 'Male'if age == 40 and sex =="Male" thenprint(" 男人四十一枝花 ")elseif age > 60 and sex ~="Female" thenprint("old man without country!")elseif age < 20 thenio.write("too young, too naive!\n")elseprint("Your age is "..age)endend-- 调用main()for循环sum = 0for i = 100, 1, -2 dosum = sum + iend
函数
1.function myPower(x,y)return y+xendpower2 = myPower(2,3)print(power2)2.function newCounter()local i = 0return function() -- anonymous functioni = i + 1return iendendc1 = newCounter()print(c1()) --> 1print(c1()) --> 2print(c1())
返回值
name, age,bGay = "yiming", 37, false, "yimingl@hotmail.com"print(name,age,bGay)function isMyGirl(name)return name == 'xiao6' , nameendlocal bol,name = isMyGirl('xiao6')print(name,bol)
Table
key,value的键值对 类似 maplucy = {name='xiao6',age=18,height=165.5}xiao6.age=35print(xiao6.name,xiao6.age,xiao6.height)print(xiao6)
数组
arr = {"string", 100, "xiao6",function() print("memeda") return 1 end}print(arr[4]())
遍历
for k, v in pairs(arr) doprint(k, v)end
面向对象
成员函数
person = {name='xiao6',age = 18}function person.eat(food)print(person.name .." eating "..food)endperson.eat("xxoo")
