Lua腳本語言快速入門手冊

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

Lua用法簡述

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

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

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 文件,代碼以下:macos

print("Hello World!")

執行如下命令:編程

$ lua HelloWorld.lua

輸出結果爲:數組

Hello World!

1.數據類型及其邏輯處理

Lua語言提供了以下幾種數據類型:booleans(布爾)、numbers(數值)、strings(字符串)、tables(表格),和許多高級語言相比,相對簡單。下面將結合例子對Lua的基本數據類型和邏輯處理進行說明。服務器

1.字符串

下面定義一個字符串類型的數據:curl

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腳本

相關文章
相關標籤/搜索