Lua语法基础(1)---简介、基本数据类型、表达式
我覺得我已經陷入了一個坑內。因為,安裝了Lua和SublimeText3編輯器之后,怎么使自己編寫的lua代碼在untiy內運行起來,是個我完全不了解的機制。先放一放吧。首先,來回顧一下Lua的語法基礎。
第一 起點
在Lua中具有一個Chunks的概念。Chunk是一系列語句,Lua執(zhí)行的每一塊語句,比如一個文件或者交互模式下的每一行都是一個Chunk。一個代碼塊,可以是一個語句,一系列語句的組合,或者一個函數。
注意,在交互模式下,Lua通常把每一個行當作一個Chunk,但如果Lua一行不是一個完整的Chunk時,他會等待繼續(xù)輸入直到得到一個完整的Chunk.在Lua等待續(xù)行時,顯示不同的提示符(一般是>>)。這個其實,木有太有用哦。
當然,Lua和其他語言一樣,也有關鍵字,大體如下:
and break do else elseif end false for function if in local nil not or repeat return then true until while注意:Lua是大小寫敏感的。
單行注釋:?--?
塊注釋:--[[ ? ? ]]
第二 基本數據類型
Lua是動態(tài)類型語言,變量不要類型定義。Lua中有8個基本類型分別為:nil、boolean、number、string、userdata、function、thread和table。函數type可以測試給定變量或者值的類型。
Nil :一個全局變量沒有被賦值以前,默認值為nil,給一個變量賦值為nil,表示釋放該變量。
Boolean:只有兩個值,true和false。但要注意Lua中所有的值都可以作為條件。在控制結構的條件中除了false和nil為假,其他值都為真。所以Lua認為0和空串都是真。
Numbers:表示實數,Lua中沒有整數。一般有個錯誤的看法CPU運算浮點數比整數慢。事實不是如此,用實數代替整數不會有什么誤差(除非數字大于100,000,000,000,000)。Lua的numbers可以處理任何長整數不用擔心誤差。你也可以在編譯Lua的時候使用長整型或者單精度浮點型代替numbers。
Strings:指字符的序列。lua是8位字節(jié),所以字符串可以包含任何數值字符,包括嵌入的0。這意味著可以存儲任意的二進制數據在一個字符串里。
a、類型轉換
運行時,Lua會自動在string和numbers之間自動進行類型轉換,當一個字符串使用算術操作符時,string就會被轉成數字。另外,也可以使用tonumber()函數和tostring()函數顯式地進行字符與數字的轉換。tonumber()函數轉換時,如果string不是正確的數字該函數將返回nil。 見代碼實例:
--字符與數字的隱式轉換 print("10" + 7) --輸出結果為:17,將字符10隱私轉化為Number類型計算 print("hello" + 7) --無法進行運算,即不能隱式將"hello"字符轉化為Number計算 --[[系統(tǒng)錯誤如下: stdin:1: attempt to perform arithmetic on a string value stack traceback: stdin:1: in main chunk [C]: ? --]]--字符與數字的顯式轉換 print(tonumber("100")+11) --輸出結果為:111 print(type(tostring(100))) --輸出結果為:stringb、常用的字符處理函數介紹
string.char()函數根據傳入的ASCII編碼返回該編碼對應的字符。如:string.char(10),表示字符換行符,10是換行符的ASCII編碼。 ? ?
string.len()函數求字符串的長度。 string.sub(aString, start, end)?函數返回指定字符串的子串。 string.format()函數格式化輸出指定字符串。%s表示字符串,%d表示所有數字,%D表示非數字,%a表示字母,%c表示控制字符,%l小寫字母,%p標點符號,%s空格符號,%u大寫字母,%w字母數字,%x十六進制數,%z用0表示的字符。加%前綴可以讓特殊符號也能用在格式化中(如:().%+_*?[ ^ $ ]),如%%代表百分比符號。%.4f表示小數點后有4位的浮點數,%02d.表示至少有兩個數字的整數,如果不足兩個數字則用0補足。 sting.find(sourceString, targetString)?函數在sourceString字符串中查找第一個符合targetString字符串的位置,如果找到則返回開始和結束的位置,沒找到則返回nil。 string.gsub(sourceString, pattern, replacementString)?函數返回一個字符串,sourceString字符中滿足pattern格式的字符都會被替換成replacementString參數的值。 string.gfind(sourceString, pattern)?函數遍歷一個字符串,一旦查找到符合指定格式的字符串就返回該子串。 Functions:函數是第一類值(和其他變量相同),意味著函數可以存儲在變量中,可以作為函數的參數,也可以作為函數的返回值。Lua可以調用lua或者C實現(xiàn)的函數,Lua所有標準庫都是用C實現(xiàn)的。標準庫包括string庫、table庫、I/O庫、OS庫、算術庫、debug庫。 Userdata和Thread:userdata在Lua中除了賦值和相等比較外沒有預定義的操作。 第三 表達式 Lua中的表達式包括數字常量、字符串常量、變量、一元和二元運算符、函數調用。還可以是非傳統(tǒng)的函數定義和表構造。 算術表達式: 二元運算符 + - * / ^ (加減乘除冪),一元運算符 -(負值)。其中這些運算符的操作數都是實數。 關系運算符: < > <= >= == ~=。這些操作符返回結果為false或者true;==和~=比較兩個值,如果兩個值類型不同,Lua認為兩者不同;nil只和自己相等。 邏輯運算符: and or not。 值得注意的是,邏輯運算符認為false和nil是假(false),其他為真,0也是true. and和or的運算結果不是true和false,而是和它的兩個操作數相關。 a and b -- 如果a為false,則返回a,否則返回b a or b -- 如果a為true,則返回a,否則返回b例如:
print(4 and 5) --> 5 print(nil and 13) --> nil print(false and 13) --> false print(4 or 5) --> 4 print(false or 5) --> 5一個很實用的技巧:如果x為false或者nil則給x賦初始值v
x = x or v等價于if not x then x = v endand 的優(yōu)先級比or高。
C語言中的三元運算符可以在Lua中實現(xiàn),如下:
a ? b : c 等價于 (a and b) or c 或者直接寫成 a and b or cnot的結果一直返回false或者true
print(not nil) --> true print(not false) --> true print(not 0) --> false print(not not nil) --> false連接運算符:字符串連接,如果操作數為數字,Lua將數字轉成字符串。
最重要的運算符的優(yōu)先級,從高到低的順序:
^ not - (unary) * / + - .. < > <= >= ~= == and or除了^和..外所有的二元運算符都是左連接的。 a+i < b/2+1 <--> (a+i) < ((b/2)+1) 5+x^2*8 <--> 5+((x^2)*8) a < y and y <= z <--> (a < y) and (y <= z) -x^2 <--> -(x^2) x^y^z <--> x^(y^z)Table表的構造
構造器是創(chuàng)建和初始化表的表達式,可以用{}創(chuàng)建一個空表。也可以直接初始化數組: days = {"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}如果想初始化一個表作為record使用可以這樣:
a = {x=0, y=0} <--> a = {}; a.x=0; a.y=0不管用何種方式創(chuàng)建table,我們都可以向表中添加或者刪除任何類型的域,構造函數僅僅影響表的初始化。
w = {x=0, y=0, label="console"} x = {sin(0), sin(1), sin(2)} w[1] = "another field" x.f = w print(w["x"]) --> 0 print(w[1]) --> another field print(x.f[1]) --> another field w.x = nil -- remove field "x"還可以將表table作為table的一個成員,從而構成多維表。
polyline = {color="blue", thickness=2, npoints=4, {x=0, y=0}, {x=-10, y=0}, {x=-10, y=1}, {x=0, y=1} }總結
以上是生活随笔為你收集整理的Lua语法基础(1)---简介、基本数据类型、表达式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 为什么生孩子会梦到蛇
- 下一篇: 一个显示日期的工具类