日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Lua语法基础(1)---简介、基本数据类型、表达式

發(fā)布時間:2023/11/29 编程问答 30 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Lua语法基础(1)---简介、基本数据类型、表达式 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

我覺得我已經陷入了一個坑內。因為,安裝了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))) --輸出結果為:string

    b、常用的字符處理函數介紹

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 end

and 的優(yōu)先級比or高。

C語言中的三元運算符可以在Lua中實現(xiàn),如下:

a ? b : c 等價于 (a and b) or c 或者直接寫成 a and b or c

not的結果一直返回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)---简介、基本数据类型、表达式的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。