<p>在筆記之前袍啡,先提供16年5月31日在官網(wǎng)下載的LuaForWIndows的解釋器安裝包:點我<a title="Title">LuaForWindows.zip</a>,寶典上提到的你應(yīng)該使用5.1的最小版本乱投。</p>
<p><h6>廢話</h6>
Lua解釋器是交互的夸盟,你輸入命令就可以得到回復萤衰,就像是你在用Lua這門語言和解釋器進行對話一般。雙擊執(zhí)行你的Lua解釋器輸入print("Hello World")
就會回顯到你解釋器的下一行坏瞄。這行語句獲取你輸入的字符串桂对,然后將它傳遞給了print(args)
這個函數(shù),該函數(shù)再將它輸出到解釋器窗口中鸠匀。
對于Lua錯誤信息的理解接校,你可以使用一個案例來進行解讀,在輸入pnrint("Hello World!")
之后enter執(zhí)行狮崩,你會發(fā)現(xiàn)如下的信息<h6>[PS:lua中--代表注釋]</h6>
stdin:1: attempt to call global 'pnrint' (a nil value)--這里指出了錯誤發(fā)生的行數(shù)
stack traceback:
stdin:1: in main chunk
[C]: ?
如上所示Lua提示你試圖調(diào)用一個全局的pnrint(args)
蛛勉,但是她是一個空值,剩余的信息叫做棧追蹤[stack traback]睦柴,他指出了錯誤出現(xiàn)在哪里诽凌,當你從一個函數(shù)調(diào)用另一個函數(shù)的他們很有用。另外使用上下鍵可以快速翻閱你的輸入歷史記錄坦敌。
</p>
<h6>Lua處理數(shù)字</h6>
<p>
輸入print(2+2)
你會看見系統(tǒng)響應(yīng)一個4侣诵,因為解釋器幫你做了運算操作,Lua的運算操作符支持如下:
<li>+:加狱窘,如上個例子所示
<li>-:減杜顺,同上,變更符號即可
<li>*:乘蘸炸,同上
<li>/:除躬络,同上
<li>^:冪,example:print(13^2)
=169
<li>%:取模搭儒,example:print(13%2)
=1
<li>-: 取負穷当,example:print(-(13^2))
=-1</li>
也可以使用復雜的表達式提茁,注意運算的優(yōu)先級和括號的使用即可,即確保明確的數(shù)據(jù)關(guān)系馁菜。
對于比較大的數(shù)值茴扁,比如1,000,000,000,000,000(10^15),你可以使用科學計數(shù)法來進行表示解釋器能夠識別:
> print(10^15)
1e+015
> print(-10^15)
-1e+015
>
Lua為了將他們顯示出來汪疮,先將他們轉(zhuǎn)化成了科學記數(shù)法峭火,同時你也可以以這種方式來表達一個數(shù)字,表示取一個數(shù)10的幾次冪智嚷,冪指數(shù)為第二個數(shù)字(中間的e不區(qū)分大小寫):
> print(1.234e6)
1234000
> print(1.234\*10\*10\*10\*10\*10\*10)
1234000
> print(1234e-4)
0.1234
> print(1234\*(10^-4))
0.1234
十六進制表示法:Lua可以自動的將十六進制的數(shù)值轉(zhuǎn)換成十進制躲胳,以0x開頭后面接著有效的0~F十六進制數(shù)字:
> print(0x1)
1
> print(0xF)
15
> print(0x19)
25
> print(0x10a4)
4260
coding時你可以使用這種格式來表示數(shù)字,Lua會對他們進行正確的轉(zhuǎn)換纤勒,Lua僅以十進制或者科學記數(shù)法來表示結(jié)果坯苹,不管這些數(shù)字是怎么輸入的。
> print(2\*0xF)
30
> print(0x10^2)
256
</p>
<p><h6>關(guān)于浮點的理解</h6>
在Lua中每一個數(shù)都是使用浮點來進行表示的摇天,在一般的使用中沒有什么不妥的地方粹湃,但有時候....
> pointTwo = 1.2 - 1.0
> print(pointTwo<0.2)
true
> print(pointTwo)
0.2
顯然,在這里0.2不能夠被精確的表示為一個浮點數(shù)泉坐,因此編程語言必須在計算他的值和顯示他的時候進入舍入为鳄。浮點數(shù)可以精確的表示所有的10-37~1037之間的整數(shù),所以你不會嘗嘗用到這個問題腕让。然而孤钦,舍入在您使用實數(shù)的時候可能會導致計算誤差。
</p>
<p>
<h6>值和變量的理解</h6>
Lua和其他編程語言一樣對于值和和變量之間進行了區(qū)分纯丸。了解值的種類和變量之間的區(qū)別對我們接下來的工作很有幫助偏形。
什么是值?
他就是你直接使用的東西觉鼻,就想17這個數(shù)俊扭,或者"hello"這個字符串。14是一個不同于17的值坠陈,但是他們都是一個數(shù)值萨惑,字符串"hello"是一個值,但是他和14仇矾、17是不同類型的值庸蔼。
Lua提供了如下的幾種基本數(shù)據(jù)類型
<li>number 所有的數(shù)字都屬于這一類 example:1、7313贮匕、1e5姐仅、0xFF1a
<li>string 一個字符序列 example:"Hello"
<li>boolean 真(true)和假(false)屬于這種類型
<li>function 函數(shù)是一個可以調(diào)用的語句集合
<li>table 表示傳統(tǒng)的哈希(Hash)表(字典)和數(shù)組的混合類型
<li>thread 線程類型的值是一個可用于異步計算的協(xié)同程序(有限的輕量線程)
<li>userdata 用戶數(shù)據(jù)是主語言(host language,通常是C)中所定義的傳統(tǒng)的數(shù)據(jù)結(jié)構(gòu)包裝器
這幾種數(shù)據(jù)類型都會在以后的工作中出現(xiàn),需要進行仔細的理解萍嬉。
</p>
</p>
<h6>使用type(args)函數(shù)</h6>
type(args)在Lua中用于確定一個給定值的類型乌昔,它會給你在編程中進行確認和驗證帶來更大的靈活性:
> print(type(t))
nil
> print(type(5))
number
> print(type(""))
string
> print(type(table))
table
如上所示隙疚,你對于傳入的值進行了type(args)
函數(shù)的調(diào)用壤追,并且對他的結(jié)果進行了print(args)
調(diào)用,所以它輸出了你傳入的值是何種類型供屉,指的注意的是行冰,第一個輸出中,Lua解釋器給出了nil
因為解釋器他找不到這個類型伶丐,所以他總是nil的悼做。</p>
<p>
<h6>使用變量</h6>
變量可以看做是一個Lua值的臨時名稱,而同一個可以有多個名稱哗魂。比如如下的例子:
> x=2
> y=2
> print(x+y)
4
這個例子中肛走,你將x、y兩個變量分別綁定了一個值2录别,然后調(diào)用print(args)
進行輸出朽色。
變量名的命名規(guī)范:必須以下劃線或者字母開頭。名稱本身不能包含有除字母组题、數(shù)字或者下劃線之外的其他字符葫男。同時也不能是關(guān)鍵字,并且是區(qū)分大小寫的崔列。
變量的賦值:
> foo=14
> print(foo)
14
> foo="hello"
> print(foo)
hello
> x=12--將數(shù)值4綁定到x
> y=x+2--將標識符x的值賦予標識符y并+2梢褐。這在字面上表示y=12+2
> print(x+y)
26
> x=15--如果你將x從新賦值,那么也只是意味著你將x重新綁定了值赵讯,與y無關(guān)
> print(x+y)
29
--值和變量之前的區(qū)別嘗嘗會被混淆盈咳,尤其是你在更高級的論題上工作的時候,你可以使用Lua解釋器作
--為一個工具來探索這些規(guī)則
對多個變量賦值的形式:
> x,y=12,13--如果運算符左邊的變量個數(shù)比右邊多边翼,那么剩下的變量會被賦予nil值
> print(x+y)
25
</p>
<p>
<h6>Lua中關(guān)于值的比較</h6>
Lua中的比較運算符由如下幾種可供操作:
<li>相等 ==
<li>小于 <
<li>大于 >
<li>小于等于 <=
<li>大于等于 >=
<li>不等于 ~=</li>
“<”猪贪,“>”,“<=”讯私,“>=”運算符只能用來比較相同類型的值热押,例如在數(shù)和數(shù)之間或者字符串和字符串之間進行比較,否則你會收到下面的錯誤信息:
> print(1>="hello")
stdin:1: attempt to compare string with number
stack traceback:
stdin:1: in main chunk
[C]: ?
換個說法就是:“==”和“~=”適用于所有的值斤寇,而大于和小于(“<”和“>”)這一組運算符只在數(shù)值和字符串內(nèi)部有意義桶癣。
> print("hello"=="hello1")--進行字符串比較的時候比較的是他們的內(nèi)容是否相同
false
> print("hello"=="hello")
true
</p>
<p>
<h6>Using 字符串</h6>
“>”、“<” 運算符可以在字符串上使用娘锁,但是結(jié)果將取決于系統(tǒng)內(nèi)部對不同字符的排列次序牙寞,對于單個字符的比較,運算符比較兩個字符在字符集中的次序; 對于多個字符比較间雀,他將比較兩個字符串中第一個出現(xiàn)的不同字符悔详。
> print("hello"=="hello1")--1
false
> print("hello"=="hello")--2
true
> print("a"<"b")--3
true
> print("b">="a")--4
true
> print("abcd"<"abce")--5
true
> print("a"<"A")--6
false
> print("abcd"<"abcde")
true
> print("rests"<"test")--比較第一個出現(xiàn)的不同字符,也就是拿著'r'和't'比較
true
第6個例子惹挟,在標準的Lua字符集中茄螃,大寫英文字母在小寫英文字母簽名,因此连锯,'a'要比'A'大归苍。
</p>