儘管 Lua 的關鍵詞的設計,運行符的設計,語法的設計等方面與 C 很相似,但我們還要注意其明顯不同的地方。
條件判斷時的真假條件
Lua 中所有的值都可以作爲條件。在控制結構的條件中除了 false 和 nil 爲假,其他值都爲真。所以 Lua 認爲 0 和 空串 都是真。
而 C 中,認爲只要是在內存中表現爲 0 值的符號都爲假。
字符串
Lua 中字符串的定義是 字符的序列。lua 的字符串可以包含任何數值字符,包括嵌入的 0。這意味着你可以存儲任意的二進制數據在一個字符串裏。Lua 本身有相應的函數來處理這樣的字符串。
而 C 語言中,雖然也可以在一個字符串中存放 0,但其字符串處理函數不能正確處理放在中間的零值,因爲 C 中的算法不是用長度來做判斷,而是以遇到第一個零值來判斷的。
轉義字符:
/a bell /b back space -- 後退
/f form feed -- 換頁 /n newline -- 換行
/r carriage return -- 回車 /t horizontal tab -- 製表
/v vertical tab // backslash -- "/"
/" double quote -- 雙引號 /' single quote -- 單引號
/[ left square bracket -- 左中括號 /] right square bracket -- 右中括號
還可以用[[…]]表示字符串,這種形式的字符串可以包含多行可以嵌套且不會解釋轉義序列。
運行時,Lua會自動在string和number之間自動進行類型轉換。
關係運算符
Lua 中的不等號是 ~=,
而 C 中的不等號是 !=。
邏輯運算符
Lua 中的邏輯運算符是 and, or, not,而 C 中的邏輯運算符是 &&, ||, !。而且它們的用法很大的不一樣,Lua 的邏輯運算符的用法顯得有點“小技巧”。
Lua 邏輯運算符認爲 false 和 nil 是假(false),其他爲真,0也是true。
and 和 or 的運算結果不是 true 和 false,而是和它的兩個操作數相關。
not 的結果一直返回 false 或者 true。
a and b -- 如果a爲false,則返回a,否則返回b
a or b -- 如果a爲true,則返回a,否則返回b
C語言中的三元運算符
a ? b : c
在Lua中可以這樣實現:
(a and b) or c
連接運算符
.. --兩個點
字符串連接,如果操作數爲數字,Lua將數字轉成字符串
優先級
從高到低的順序:
^
not - (unary)
* /
+ -
..
< > <= >= ~= ==
and
or
除了^和..外所有的二元運算符都是左連接的。
多變量賦值
Lua可以對多個變量同時賦值,變量列表和值列表的各個元素用逗號分開,賦值語句右邊的值會依次賦給左邊的變量。遇到賦值語句 Lua 會先計算右邊所有的值然後再執行賦值操作。當變量個數和值的個數不一致時,Lua會一直以變量個數爲基礎採取以下策略
a. 變量個數>值的個數 按變量個數補足nil
b. 變量個數<值的個數 多餘的值會被忽略
C 中,只有單變量賦值的概念。
表的構造
構造器是創建和初始化表的表達式。表是Lua特有的功能強大的東西。最簡單的構造函數是{},用來創建一個空表。可以直接初始化數組(第一個元素索引爲1)
不管用何種方式創建table,我們都可以向表中添加或者刪除任何類型的域,構造函數僅僅影響表的初始化。