Lua 是一種輕量小巧的腳本語言,用标準 C 語言編寫并以源代碼形式開放,其設計目的是為了嵌入應用程式中,進而為應用程式提供靈活的擴充和定制功能。Lua 可以應用在遊戲開發、獨立應用腳本、Web 應用腳本、擴充和資料庫插件、安全系統等場景。
特性
- 輕量級:标準C語言編寫并以源代碼形式開放,編譯後僅僅一百餘K
- 可擴充:Lua提供了非常易于使用的擴充接口和機制
- 支援面向過程程式設計和函數式程式設計
- 自動記憶體管理;隻提供了一種通用類型的表(table),用它可以實作數組,哈希表,集合,對象
- 語言内置模式比對;閉包(closure);函數也可以看做一個值;提供多線程(協同程序,并非作業系統所支援的線程)支援
- 通過閉包和table可以很友善地支援面向對象程式設計所需要的一些關鍵機制,比如資料抽象,虛函數,繼承和重載等
應用場景
- 遊戲開發
- 獨立應用腳本
- Web 應用腳本
- 擴充和資料庫插件
- 安全系統,如入侵檢測系統
安裝
http://www.lua.org/基本文法
- 單行注釋:
--
- 多行注釋:
--[=[
多行注釋
--]=]
- Lua 标示符用于定義一個變量,函數擷取其他使用者定義的項。标示符以一個字母 A 到 Z 或 a 到 z 或下劃線 _ 開頭後加上0個或多個字母,下劃線,數字(0到9)。最好不要使用下劃線加大寫字母的标示符,因為Lua的保留字也是這樣的。
- 全局變量:預設是全局變量,如果要設定局部變量,加local關鍵字
資料類型
Lua 是動态類型語言,變量不要類型定義,隻需要為變量指派。 值可以存儲在變量中,作為參數傳遞或結果傳回。Lua 中有 8 個基本類型分别為:nil、boolean、number、string、userdata、function、thread 和 table。
- nil:表示一個無效值(在條件表達式中相當于false), nil進行比較時要加上雙引号,給全局變量或者table表裡變量指派nil時等同于把他删掉
- boolean: 包含兩個值:false和true。
- number: 表示雙精度類型的實浮點數
- string: 字元串由一對雙引号或單引号來表示
- function: 由 C 或 Lua 編寫的函數
- userdata: 表示任意存儲在變量中的C資料結構
- thread: 表示執行的獨立線路,用于執行協同程式
- table: Lua 中的表(table)其實是一個"關聯數組"(associative arrays),數組的索引可以是數字、字元串或表類型。在 Lua 裡,table 的建立是通過"構造表達式"來完成,最簡單構造表達式是{},用來建立一個空表。
案例
1. 字元串
- 定義一個局部變量val,并輸出
local val = "hello"
print(val)
-- 結果是 hello
2. 表格
- 定義一個數組,輸出第一個值
local myTable = { "redis", "lua", true, 8 }
print(myTable[1])
-- 結果是 redis
3. for
- 下面代碼會計算0到10的和
local num = 0
for i = 1, 10 do
num = num + i
end
print(num)
- 如果要周遊myTable,需要知道tables的長度,隻需要在變量前加一個#号即可:
for i = 1, #myTable do
print(myArray[i])
end
- Lua還提供了内置函數ipairs,使用for index,value ipairs(tables)可以周遊出所有的索引下标和值:
for index, value in ipairs(myArray) do
print(index)
print(value)
end
4. while
- 下面代碼同樣會計算1到10的和,隻不過使用的是while循環,while循環同樣以end作為結束符。
local sum = 0
local i = 0
while i <= 10 do
sum = sum + i
i = i + 1
end
print(sum)
5. if else
- 确定數組中是否包含了redis,有則列印true,注意if以end結尾,if後緊跟then
local myTable2 = { "python", "redis", "java" }
for i2 = 1, #myTable2 do
if myTable2[i2] == "redis" then
print("true")
break
else
print("false")
end
end
6. hash
- 使用類似哈希的功能,同樣可以使用tables類型,例如下面代碼定義了一個tables,每個元素包含了key和value,其中".."是将兩個字元串進行連接配接:
user = { age = 10, name = "tom" }
print("user age is" .. user["age"])
- 如果要周遊user,可以使用Lua的内置函數pairs:
for key, value in pairs(user) do
print(key .. value)
end
7. 函數定義
- 函數定義 Lua中,函數以function開頭,以end結尾,funcName是函數名,中間部分是函數體
function add(param1, param2)
return param1 + param2
end
print(add(1,2))
以上為個人見解,如有誤歡迎各位指正