1、lua學(xué)習(xí)之入門(mén)(一)----環(huán)境搭建
2、lua學(xué)習(xí)之入門(mén)(二)----基礎(chǔ)語(yǔ)法1
3、lua學(xué)習(xí)之入門(mén)(二)----基礎(chǔ)語(yǔ)法2
4、lua學(xué)習(xí)之入門(mén)(三)----函數(shù)
???? 學(xué)習(xí)LUA第6個(gè)小時(shí)了,這是第2篇文章,也是我今天學(xué)習(xí)的最后總結(jié)了,LUA我也是個(gè)初學(xué)者,我目標(biāo)只是想盡可能的把自己學(xué)習(xí)的一些想法表現(xiàn)出來(lái).可能寫(xiě)的沒(méi)有那些大蝦們好,大蝦們的生動(dòng).但至少是我個(gè)人的寫(xiě)作,本人很不喜歡轉(zhuǎn)載的,轉(zhuǎn)載不如直接去別人BLOG看..再一次聲明..我是LUA初學(xué)者,一個(gè)初學(xué)者寫(xiě)給初學(xué)者的....廢話不說(shuō)..入正題.
?????
??????? 任何語(yǔ)言,首先要明白的是 標(biāo)識(shí)符 的命名規(guī)則,LUA的規(guī)則和C語(yǔ)言的沒(méi)太大分別都是由:字母,數(shù)字,下劃線組成,而且不能以數(shù)字開(kāi)頭..貌似我會(huì)的編程語(yǔ)言都是這樣的規(guī)定..?? 這個(gè)沒(méi)啥技術(shù)難度....靠死記的..
??????? LUA的字符串表示是可以用單引號(hào)或者雙引號(hào)的...這點(diǎn)跟JAVASCRIPT是一樣的,
??????? 在LUA手冊(cè)里有一段這樣的東西
?????a?
=
?
'
alo\n123"
'
?????a?
=
?
"
alo\n123\
""
?????a?
=
?
'
\97lo\10\04923"
'
?????a?
=
?[[alo
?????
123
"
]]
?????a?
=
?[
==
[
?????alo
?????
123
"
]==]
手冊(cè)里的解釋是這樣的
字符串還可以用一種長(zhǎng)括號(hào)括起來(lái)的方式定義。我們把兩個(gè)正的方括號(hào)間插入?n?個(gè)等號(hào)定義為第?n?級(jí)正長(zhǎng)括號(hào)。就是說(shuō),0?級(jí)正的長(zhǎng)括號(hào)寫(xiě)作?[[?,一級(jí)正的長(zhǎng)括號(hào)寫(xiě)作?[=[?,如此等等。反的長(zhǎng)擴(kuò)展也作類(lèi)似定義;舉個(gè)例子,4?級(jí)反的長(zhǎng)括號(hào)寫(xiě)作?]====]?。一個(gè)長(zhǎng)字符串可以由任何一級(jí)的正的長(zhǎng)括號(hào)開(kāi)始,而由第一個(gè)碰到的同級(jí)反的長(zhǎng)括號(hào)結(jié)束。整個(gè)詞法分析過(guò)程將不受分行限制,不處理任何轉(zhuǎn)意符,并且忽略掉任何不同級(jí)別的長(zhǎng)括號(hào)。這種方式描述的字符串可以包含任何東西,當(dāng)然特定級(jí)別的反長(zhǎng)括號(hào)除外。?

另一個(gè)約定是,當(dāng)正的長(zhǎng)括號(hào)后面立即跟了一個(gè)換行符,這個(gè)換行符就不包含在這個(gè)字符串內(nèi)。舉個(gè)例子,假設(shè)一個(gè)系統(tǒng)使用?ASCII?碼(這時(shí),'a'?編碼為?97?,換行符編碼為?10?,'1'?編碼為?49?),下面五種方式描述了完全相同的字符串:?

很別扭啊手冊(cè)里的介紹是這個(gè)a所代表的字符串顯示都是一樣的...感覺(jué)犯暈啊...
手冊(cè)例子想表達(dá)的意思我解析一下,
a = 'alo\n123"'? 這個(gè)字符串是用單引號(hào)括起來(lái)的,123后面跟了個(gè)".....想表達(dá)的意思就是說(shuō),如果用單引號(hào)作為字符串的引用的話,內(nèi)部的雙引號(hào)做雙引號(hào)處理,
a = "alo\n123\"" 這個(gè)字符串則是用雙引號(hào)括起來(lái)的,為了解決沖突,就要使用轉(zhuǎn)義字符\"去代表"
a = '\97lo\10\04923"'? 這個(gè)其實(shí)就是ASCII碼轉(zhuǎn)義而已..
最令人犯暈的是下面..
這個(gè)想表達(dá)啥呢?其實(shí)這個(gè)作用和C#里的@""有點(diǎn)類(lèi)似..有點(diǎn)像格式輸出吧,,
里面的思想有個(gè)靈活的配對(duì),"[["? 在手冊(cè)里有個(gè)名字,叫長(zhǎng)括號(hào),而在"[==["中間的等號(hào)個(gè)數(shù)代表多少級(jí)的長(zhǎng)括號(hào),沒(méi)有等號(hào)為0級(jí),1個(gè)等號(hào)為1級(jí),類(lèi)推下去.
開(kāi)始在代碼里,我以為這里"級(jí)"的意義在于這個(gè)字符串占多少行的意思,但是經(jīng)過(guò)我代碼的測(cè)試原來(lái)沒(méi)任何關(guān)系..
依照我這個(gè)初學(xué)者的猜測(cè)...設(shè)置這些的意義,目的就是一個(gè)避免字符串內(nèi)過(guò)多的使用轉(zhuǎn)義字符吧,LUA的目標(biāo)是要做嵌入腳本語(yǔ)言,
例如有個(gè)游戲的對(duì)白,
小孩說(shuō):"很牛啊"
牛說(shuō):"不牛"
牛說(shuō):"]]"
小孩說(shuō):"]=]"將以上字符
a=[==[
小孩說(shuō):"很牛啊"
牛說(shuō):"不牛"
牛說(shuō):"]]"
小孩說(shuō):"]=]"]==]
這樣在[==[里就可以使用任何的字符串表達(dá)符,提供了更大的靈活性.
后來(lái)我咨詢(xún)了下LUA高手他給我的答復(fù)如下
這個(gè)是5.1版本新加的功能,我想主要的作用是屏蔽轉(zhuǎn)義字符的作用的,在5.0的時(shí)候,我們寫(xiě)lua都需要自己可意去回避一些轉(zhuǎn)義字符..這個(gè)只是我個(gè)人想法,你可以問(wèn)問(wèn)其他人,目前我實(shí)際應(yīng)用的開(kāi)發(fā)都是5.0居多,這個(gè)是5.1新加的,我也不是很確定,但照字面意思..就算不全對(duì),也差不多了看來(lái)我的猜想是正確的.
變量
LUA稱(chēng)為腳本語(yǔ)言,那么就注定了他的變量是弱類(lèi)型的,就是說(shuō)變量沒(méi)有類(lèi)型,至少我認(rèn)識(shí)的腳本語(yǔ)言JAVASCRIPT就是沒(méi)類(lèi)型的.所以姑且把腳本語(yǔ)言定義為變量沒(méi)有類(lèi)型的語(yǔ)言就是腳本語(yǔ)言...(某XX教授:你丫的亂下定義誤人子弟!..純粹是幫助記憶...別教真...別教真).
?????????????????????????????????????
變量沒(méi)有類(lèi)型,有類(lèi)型的只是值 (腳本語(yǔ)言的特點(diǎn))?????????
Lua?中有八種基本類(lèi)型:?nil,?boolean,?number,?string,?function,?userdata,?thread,?and?table.?Nil?類(lèi)型只有一種值?nil?,它的主要用途用于標(biāo)表識(shí)和別的任何值的差異;通常,當(dāng)需要描述一個(gè)無(wú)意義的值時(shí)會(huì)用到它。?Boolean?類(lèi)型只有兩種值:false?和?true。?nil?和?false?都能導(dǎo)致條件為假;而另外所有的值都被當(dāng)作真。?Number?表示實(shí)數(shù)(雙精度浮點(diǎn)數(shù))。(編譯一個(gè)其它內(nèi)部數(shù)字類(lèi)型的?Lua?解釋器是件很容易的事;比如把內(nèi)部數(shù)字類(lèi)型改作單精度浮點(diǎn)數(shù)或長(zhǎng)整型。參見(jiàn)文件?luaconf.h?。)?String?表示一串字符的數(shù)組。?Lua?是?8-bit?clean?的:字符串可以包含任何?8?位字符,包括零結(jié)束符?('\0')? userdata 類(lèi)型用來(lái)將任意 C 數(shù)據(jù)保存在 Lua 變量中。這個(gè)類(lèi)型相當(dāng)于一塊原生的內(nèi)存,除了賦值和相同性判斷,Lua 沒(méi)有為之預(yù)定義任何操作。然而,通過(guò)使用
metatable (元表) ,程序員可以為 userdata 自定義一組操作. userdata 不能在 Lua 中創(chuàng)建出來(lái),也不能在 Lua 中修改。這樣的操作只能通過(guò) C API。這一點(diǎn)保證了宿主程序完全掌管其中的數(shù)據(jù)。
大家都知道,C語(yǔ)言里有幾個(gè)特別的數(shù)據(jù)構(gòu)造,例如,結(jié)構(gòu)體,共用體等,這個(gè)
userdata 類(lèi)型其實(shí)就滿(mǎn)足結(jié)構(gòu)體傳值的功能的數(shù)據(jù)類(lèi)型,至少我現(xiàn)在是這樣理解的..至于元表我還沒(méi)有接觸,暫時(shí)將
userdata 類(lèi)型等同于一個(gè)只讀類(lèi)型.
Lua 中有三類(lèi)變量:全局變量,局部變量,還有 table 的域。 其實(shí)今天大多的時(shí)候都花費(fèi)在字符串里,但是一種語(yǔ)言來(lái)說(shuō),字符也是一個(gè)很重要的重點(diǎn),例如C#基本提供了每個(gè)類(lèi)都是 ToString()方法,C語(yǔ)言,單獨(dú)用一章介紹字符串,數(shù)據(jù)結(jié)構(gòu)里也獨(dú)立一個(gè)章專(zhuān)門(mén)說(shuō)字符串,所以這個(gè)字符串是在我們?nèi)粘i_(kāi)發(fā)中經(jīng)常用到的,對(duì)它理解得深其實(shí)是有好處的...今天就到這里
明鏡臺(tái)
posted on 2009-05-12 00:20
^喬喬^ 閱讀(4700)
評(píng)論(3) 編輯 收藏 引用 所屬分類(lèi):
Lua學(xué)習(xí)筆記