学了两天Lua语言,感叹其短小精悍,上手极快,语法还很舒服,不错!整理下学习过程当中常常用到的基础知识,共勉!html
Lua语言是在1993年由巴西一个大学研究小组发明,其设计目标是做为嵌入式程序移植到其余应用程序,它是由C语言实现的,虽然简单小巧可是功能强大,因此许多应用都选用它做为脚本语言,尤为是在游戏领域,例如大名鼎鼎的暴雪公司将Lua语言引入到“魔兽世界”这款游戏中,Rovio公司将Lua语言做为“愤怒的小鸟”这款火爆游戏的关卡升级引擎,Web服务器Nginx将Lua语言做为扩展,加强自身功能。Redis将Lua做为脚本语言可帮助开发者定制本身的Redis命令,在这以前,必须修改源码。在介绍如何在Redis中使用Lua脚本以前,有必要对Lua语言的使用作一个基本的介绍。linux
Linux & Mac上安装 Lua 安装很是简单,只须要下载源码包并在终端解压编译便可,本文使用了5.3.0版本进行安装:redis
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz tar zxf lua-5.3.0.tar.gz cd lua-5.3.0 make linux test make install
curl -R -O http://www.lua.org/ftp/lua-5.3.0.tar.gz tar zxf lua-5.3.0.tar.gz cd lua-5.3.0 make macosx test make install
接下来咱们建立一个 HelloWorld.lua 文件,代码以下:macos
print("Hello World!")
执行如下命令:编程
$ lua HelloWorld.lua
输出结果为:数组
Hello World!
Lua语言提供了以下几种数据类型:booleans(布尔)、numbers(数值)、strings(字符串)、tables(表格),和许多高级语言相比,相对简单。下面将结合例子对Lua的基本数据类型和逻辑处理进行说明。服务器
下面定义一个字符串类型的数据:curl
local strings val = "world"
其中,local表明val是一个局部变量,若是没有local表明是全局变量。
print函数能够打印出变量的值,例以下面代码将打印world,其中"--"是Lua语言的注释。编程语言
-- 结果是"world" print(hello)
在Lua中,若是要使用相似数组的功能,能够用tables类型,下面代码使用定义了一个tables类型的变量myArray,但和大多数编程语言不一样的是,Lua的数组下标从1开始计算:函数
local tables myArray = {"redis", "jedis", true, 88.0} --true print(myArray[3])
若是想遍历这个数组,可使用for和while,这些关键字和许多编程语言是一致的。
下面代码会计算1到100的和,关键字for以end做为结束符:
local int sum = 0 for i = 1, 100 do sum = sum + i end -- 输出结果为5050 print(sum)
要遍历myArray,首先须要知道tables的长度,只须要在变量前加一个#号便可:
for i = 1, #myArray do print(myArray[i]) end
除此以外,Lua还提供了内置函数ipairs,使用for index,value ipairs(tables)能够遍历出全部的索引下标和值:
for index,value in ipairs(myArray) do print(index) print(value) end
下面代码一样会计算1到100的和,只不过使用的是while循环,while循环一样以end做为结束符。
local int sum = 0 local int i = 0 while i <= 100 do sum = sum + i i = i + 1 end --输出结果为5050 print(sum)
要肯定数组中是否包含了jedis,有则打印true,注意if以end结尾,if后紧跟then:
local tables myArray = { "redis", "jedis", true, 88.0 } for i = 1, #myArray do if myArray[i] == "jedis" then print("true") break else --do nothing end end
若是要使用相似哈希的功能,一样可使用tables类型,例以下面代码定义了一个tables,每一个元素包含了key和value,其中strings1..string2是将两个字符串进行链接:
local tables user_1 = {age = 28, name = "tome"} --user_1 age is 28 print("user_1 age is " .. user_1["age"])
若是要遍历user_1,可使用Lua的内置函数pairs:
for key,value in pairs(user_1) do print(key .. value) end
在Lua中,函数以function开头,以end结尾,funcName是函数名,中间部分是函数体:
function funcName() ... end
contact函数将两个字符串拼接:
function contact(str1, str2) return str1 .. str2 end --"hello world" print(contact("hello ", "world"))