天天看點

Lua腳本快速入門

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))           

以上為個人見解,如有誤歡迎各位指正

繼續閱讀