學了兩天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"))