[轉載] Lua 中與 C 不同的設計

儘管 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會自動在stringnumber之間自動進行類型轉換。

 

關係運算符

 

 

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,我們都可以向表中添加或者刪除任何類型的域,構造函數僅僅影響表的初始化。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章