設計目的:
爲了嵌入應用程序中,從而爲應用程序提供靈活的擴展和定製功能。
特性:
1.編譯以後僅僅100k,能夠很方便嵌入別的程序裏。
2.可擴張性,Lua提供了很是易於使用的擴展接口和機制:由宿主語言(一般是C或C++)提供這些功能,Lua可使用它們,就像是原本就內置的功能同樣。
Lua 應用場景
- 遊戲開發
- 獨立應用腳本
- Web 應用腳本
- 擴展和數據庫插件如:MySQL Proxy 和 MySQL WorkBench
- 安全系統,如入侵檢測系統
標示符
Lua 標示符用於定義一個變量,函數獲取其餘用戶定義的項。標示符以一個字母 A 到 Z 或 a 到 z 或下劃線 _ 開頭後加上0個或多個字母,下劃線,數字(0到9)。
最好不要使用下劃線加大寫字母的標示符,由於Lua的保留字也是這樣的。
Lua 不容許使用特殊字符如 @, $, 和 % 來定義標示符。 Lua 是一個區分大小寫的編程語言。所以在 Lua 中 Runoob 與 runoob 是兩個不一樣的標示符
註釋:
單行註釋 --
多行註釋 --[[ 多行註釋 多行註釋 --]]
取消多行註釋 在前面加一個-
lua的數據類型
1.nil 只有值nio屬於這類,表示一個無效值。至關於條件表達式false,nil有一個刪除的做用,經過給變量賦值爲nil,等用於把這個變量刪除。nil與被type()函數轉換的值作比較的是否需加上"" 如 x = nil type(x)=="nil",由於type(X) == String
2.Boolean 包含兩個值true/false
3.number 表示雙精度類型的實浮點數。如: 1,2.2等
4.字符串由一對雙引號或單引號來表示,也能夠用[[]]來表示,執行字符串計算時,lua嘗試將這個數字字符串轉成一個數字,不能轉換將報錯。字符串鏈接用.. 如 print("123".."456"),用#計算字符串的長度,如 print(#("abc"))
5.function 由C或lua編寫的函數,函數給賦給變量 如: function a{} b = a; 能夠匿名的方式傳遞如: function testFun(tab,fun) for k ,v in pairs(tab) do print(fun(k,v)); end end tab={key1="val1",key2="val2"}; testFun(tab, function(key,val)--匿名函數 return key.."="..val; end );
6.userdata表示任意存儲在變量中的C數據結構。userdata 是一種用戶自定義數據,用於表示一種由應用程序或 C/C++ 語言庫所建立的類型,能夠將任意 C/C++ 的任意數據類型的數據(一般是 struct 和 指針)存儲到 Lua 變量中調用。
7.thread 表示執行的獨立線程,用於執行協同程序。在 Lua 裏,最主要的線程是協同程序(coroutine)。它跟線程(thread)差很少,擁有本身獨立的棧、局部變量和指令指針,能夠跟其餘協同程序共享全局變量和其餘大部分東西。
線程跟協程的區別:線程能夠同時多個運行,而協程任意時刻只能運行一個,而且處於運行狀態的協程只有被掛起(suspend)時纔會暫停。
8.table lua的表實際上是一個關聯數組,數據的索引多是字符串或者是數字,在lua裏,table的建立是經過"構建表達式"來完成,最簡單的構造表達式是{},用來建立一個空表。
若是不指定,默認的key 從1開始。如:
local tbl = {"apple", "pear", "orange", "grape"} for key, val in pairs(tbl) do print("Key", key) end
腳本執行結果爲: Key 1 Key 2 Key 3 Key 4
對 table 的索引使用方括號 []。Lua 也提供了 . 操做。
t[i] t.i 如: tab{a="abc"} tab.a -- 當索引爲字符串類型時的一種簡化寫法