1. 程式人生 > >Lua指令碼語言快速入門手冊

Lua指令碼語言快速入門手冊

學了兩天Lua語言,感嘆其短小精悍,上手極快,語法還很舒服,不錯!整理下學習過程中經常用到的基礎知識,共勉!

Lua用法簡述

Lua語言是在1993年由巴西一個大學研究小組發明,其設計目標是作為嵌入式程式移植到其他應用程式,它是由C語言實現的,雖然簡單小巧但是功能強大,所以許多應用都選用它作為指令碼語言,尤其是在遊戲領域,例如大名鼎鼎的暴雪公司將Lua語言引入到“魔獸世界”這款遊戲中,Rovio公司將Lua語言作為“憤怒的小鳥”這款火爆遊戲的關卡升級引擎,Web伺服器Nginx將Lua語言作為擴充套件,增強自身功能。Redis將Lua作為指令碼語言可幫助開發者定製自己的Redis命令,在這之前,必須修改原始碼。在介紹如何在Redis中使用Lua指令碼之前,有必要對Lua語言的使用做一個基本的介紹。

Linux 系統上安裝

Linux & Mac上安裝 Lua 安裝非常簡單,只需要下載原始碼包並在終端解壓編譯即可,本文使用了5.3.0版本進行安裝:

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

Mac OS X 系統上安裝

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 檔案,程式碼如下:

print("Hello World!")

執行以下命令:

$ lua HelloWorld.lua

輸出結果為:

Hello World!

1.資料型別及其邏輯處理

Lua語言提供瞭如下幾種資料型別:booleans(布林)、numbers(數值)、strings(字串)、tables(表格),和許多高階語言相比,相對簡單。下面將結合例子對Lua的基本資料型別和邏輯處理進行說明。

1.字串

下面定義一個字串型別的資料:

local strings val = "world"

其中,local代表val是一個區域性變數,如果沒有local代表是全域性變數。

print函式可以打印出變數的值,例如下面程式碼將列印world,其中"--"是Lua語言的註釋。

-- 結果是"world"
print(hello)

2.陣列

在Lua中,如果要使用類似陣列的功能,可以用tables型別,下面程式碼使用定義了一個tables型別的變數myArray,但和大多數程式語言不同的是,Lua的陣列下標從1開始計算:

local tables myArray = {"redis", "jedis", true, 88.0}
--true
print(myArray[3])

如果想遍歷這個陣列,可以使用for和while,這些關鍵字和許多程式語言是一致的。

for

下面程式碼會計算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

while

下面程式碼同樣會計算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)

if else

要確定陣列中是否包含了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

3.雜湊

如果要使用類似雜湊的功能,同樣可以使用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

2.函式定義

在Lua中,函式以function開頭,以end結尾,funcName是函式名,中間部分是函式體:

function funcName()
...
end

contact函式將兩個字串拼接:

function contact(str1, str2)
return str1 .. str2
end
--"hello world"
print(contact("hello ", "world"))

我的其它文章

Lua 教程:菜鳥教程

OpenResty入門之使用Lua開發Nginx外掛

Redis進階之使用Lua指令碼自定義Redis命令

SpringBoot通過RedisTemplate執行Lua指令碼