LUA安裝和基本語法
lua是什麼
Lua [1] 是一個小巧的指令碼語言。它是巴西里約熱內盧天主教大學(Pontifical Catholic University of Rio de Janeiro)裡的一個由Roberto Ierusalimschy、Waldemar Celes 和 Luiz Henrique de Figueiredo三人所組成的研究小組於1993年開發的。 其設計目的是為了通過靈活嵌入應用程式中從而為應用程式提供靈活的擴充套件和定製功能。Lua由標準C編寫而成,幾乎在所有作業系統和平臺上都可以編譯,執行。Lua並沒有提供強大的庫,這是由它的定位決定的。所以Lua不適合作為開發獨立應用程式的語言。Lua 有一個同時進行的JIT專案,提供在特定平臺上的即時編譯功能。
Lua 是一種輕量小巧的指令碼語言,用標準C語言編寫並以原始碼形式開放, 其設計目的是為了嵌入應用程式中,從而為應用程式提供靈活的擴充套件和定製功能。
應用場景
- 遊戲開發
- 獨立應用指令碼
- Web 應用指令碼
- 擴充套件和資料庫外掛如:MySQL Proxy 和 MySQL WorkBench
- 安全系統,如入侵檢測系統
- redis中巢狀呼叫實現類似事務的功能
- web容器中應用處理一些過濾 快取等等的邏輯,例如nginx。
lua的安裝
curl -R -O http://www.lua.org/ftp/lua-5.3.5.tar.gz
tar zxf lua-5.3.5.tar.gz
cd lua-5. 3.5
make linux test
注意:此時安裝,有可能會出現如下錯誤:
此時需要安裝lua相關依賴庫的支援,執行如下命令即可:
yum install libtermcap-devel ncurses-devel libevent-devel readline-devel
此時再執行lua測試看lua是否安裝成功
[[email protected] ~]# lua
Lua 5.1.4 Copyright (C) 1994-2008 Lua.org, PUC-Rio
LUA的基本語法(瞭解)
lua可以互動式程式設計
也可以指令碼式程式設計
,我們這裡著重說下後者!
1.註釋
一行註釋:兩個減號是單行註釋
--
多行註釋:
--[[
多行註釋
多行註釋
--]]
2.定義變數
全域性變數,預設的情況下,定義一個變數都是全域性變數,
如果要用區域性變數 需要宣告為local.例如:
-- 全域性變數賦值
a=1
-- 區域性變數賦值
local b=2
如果變數沒有初始化:則 它的值為nil 這和java中的null不同。
3.Lua中的資料型別
Lua 中有 8 個基本型別分別為:nil、boolean、number、string、userdata、function、thread 和 table。
資料型別 | 描述 |
---|---|
nil | 這個最簡單,只有值nil屬於該類,表示一個無效值(在條件表示式中相當於false)。 |
boolean | 包含兩個值:false和true。 |
number | 表示雙精度型別的實浮點數 |
string | 字串由一對雙引號或單引號來表示 |
function | 由 C 或 Lua 編寫的函式 |
userdata | 表示任意儲存在變數中的C資料結構 |
thread | 表示執行的獨立線路,用於執行協同程式 |
table | Lua 中的表(table)其實是一個"關聯陣列"(associative arrays),陣列的索引可以是數字、字串或表型別。在 Lua 裡,table 的建立是通過"構造表示式"來完成,最簡單構造表示式是{},用來建立一個空表。 |
例項:
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
4.流程控制
if語句
if(布林表示式)
then
--[ 在布林表示式為 true 時執行的語句 --]
end
if…else語句
if(布林表示式)
then
--[ 布林表示式為 true 時執行該語句塊 --]
else
--[ 布林表示式為 false 時執行該語句塊 --]
end
5.迴圈
while迴圈
Lua 程式語言中 while 迴圈語句在判斷條件為 true 時會重複執行迴圈體語句。
語法:
while(condition)
do
statements
end
例項:
a=10
while( a < 20 )
do
print("a 的值為:", a)
a = a+1
end
for迴圈
語法: 1->10 1:exp1 10:exp2 2:exp3:遞增的數量
for var=exp1,exp2,exp3
do
<執行體>
end
var 從 exp1 變化到 exp2,每次變化以 exp3 為步長遞增 var,並執行一次 執行體
。exp3 是可選的,如果不指定,預設為1。
例子:
for i=1,9,2
do
print(i)
end
for i=1,9,2
:i=1從1開始迴圈,9迴圈資料到9結束,2每次遞增2
repeat…until
Lua 程式語言中 repeat…until 迴圈語句不同於 for 和 while迴圈,for 和 while 迴圈的條件語句在當前迴圈執行開始時判斷,而 repeat…until 迴圈的條件語句在當前迴圈結束後判斷。
語法:
repeat
statements
until( condition )
6.函式
lua中也可以定義函式,類似於java中的方法。例如:
--[[ 函式返回兩個值的最大值 --]]
function max(num1, num2)
if (num1 > num2) then
result = num1;
else
result = num2;
end
return result;
end
-- 呼叫函式
print("兩值比較最大值為 ",max(10,4))
print("兩值比較最大值為 ",max(5,6))
執行之後的結果:
兩值比較最大值為 10
兩值比較最大值為 6
7.表
table 是 Lua 的一種資料結構用來幫助我們建立不同的資料型別,如:陣列、字典等。
Lua也是通過table來解決模組(module)、包(package)和物件(Object)的。
案例:
-- 初始化表
mytable = {}
-- 指定值
mytable[1]= "Lua"
-- 移除引用
mytable = nil
8.模組
模組類似於一個封裝庫,從 Lua 5.1 開始,Lua 加入了標準的模組管理機制,可以把一些公用的程式碼放在一個檔案裡,以 API 介面的形式在其他地方呼叫,有利於程式碼的重用和降低程式碼耦合度。
建立一個檔案叫module.lua,在module.lua中建立一個獨立的模組,程式碼如下:
-- 檔名為 module.lua
-- 定義一個名為 module 的模組
module = {}
-- 定義一個常量
module.constant = "這是一個常量"
-- 定義一個函式
function module.func1()
print("這是一個公有函式")
end
local function func2()
print("這是一個私有函式!")
end
function module.func3()
func2()
end
return module
由上可知,模組的結構就是一個 table 的結構,因此可以像操作呼叫 table 裡的元素那樣來操作呼叫模組裡的常量或函式。
上面的 func2 宣告為程式塊的區域性變數,即表示一個私有函式,因此是不能從外部訪問模組裡的這個私有函式,必須通過模組裡的公有函式來呼叫.
require 函式
require 用於 引入其他的模組,類似於java中的類要引用別的類的效果。
用法:
-- test_module.lua 檔案
-- module 模組為上文提到到 module.lua
require("module")
print(module.constant)
module.func3()