lua php 触摸精灵,lua程序设计主要学习路径
該樓層疑似違規(guī)已被系統(tǒng)折疊?隱藏此樓查看此樓
基礎(chǔ):
掌握紅色部分,了解藍色部分
進價:
掌握:紅色部分,掌握藍色部分
掌握: 品紅字部分;了解青色部分
1.2 全局變量
全局變量不需要聲明,給一個變量賦值后即創(chuàng)建了這個全局變量,訪問一個沒有初始化的全局變量也不會出錯,只不過得到的結(jié)果是:nil.
print(b) --> nil
b = 10
print(b) --> 10
如果你想刪除一個全局變量,只需要將變量負值為nil
b = nil
print(b) --> nil
這樣變量b就好像從沒被使用過一樣.換句話說, 當且僅當一個變量不等于nil時,這個變量存在。
1.3 詞法約定
標示符:字母(letter)或者下劃線開頭的字母、下劃線、數(shù)字序列.最好不要使用下劃線加大寫字母的標示符,因為Lua的保留字也是這樣的。Lua中,letter的含義是依賴于本地環(huán)境的。
保留字:以下字符為Lua的保留字,不能當作標識符。
and break do else elseif
end false for function if
in local nil not or
repeat return then true until
while
注意:Lua是大小寫敏感的.
注釋:單行注釋:--
多行注釋:--[[ --]]
--[[
print(10) -- no action (comment)
--]]
第2章 類型和值
Lua是動態(tài)類型語言,變量不要類型定義。Lua中有8個基本類型分別為:nil、boolean、number、string、userdata、function、thread和table。函數(shù)type可以測試給定變量或者值的類型。
print(type("Hello world")) --> string
print(type(10.4*3)) --> number
print(type(print)) --> function
print(type(type)) --> function
print(type(true)) --> boolean
print(type(nil)) --> nil
print(type(type(X))) --> string
變量沒有預(yù)定義的類型,每一個變量都可能包含任一種類型的值。
print(type(a)) --> nil ('a' is not initialized)
a = 10
print(type(a)) --> number
a = "a string!!"
print(type(a)) --> string
a = print -- yes, this is valid!
a(type(a)) --> function
注意上面最后兩行,我們可以使用function像使用其他值一樣使用(更多的介紹參考第六章)。一般情況下同一變量代表不同類型的值會造成混亂,最好不要用,但是特殊情況下可以帶來便利,比如nil。
2.1 Nil
Lua中特殊的類型,他只有一個值:nil;一個全局變量沒有被賦值以前默認值為nil;給全局變量負nil可以刪除該變量。
2.2 Booleans
兩個取值false和true。但要注意Lua中所有的值都可以作為條件。在控制結(jié)構(gòu)的條件中除了false和nil為假,其他值都為真。所以Lua認為0和空串都是真。
2.4 Strings
指字符的序列。lua是8位字節(jié),所以字符串可以包含任何數(shù)值字符,包括嵌入的0。這意味著你可以存儲任意的二進制數(shù)據(jù)在一個字符串里。Lua中字符串是不可以修改的,你可以創(chuàng)建一個新的變量存放你要的字符串,如下:
a = "one string"
b = string.gsub(a, "one", "another") -- change string parts
print(a) --> one string
print(b) --> another string
string和其他對象一樣,Lua自動進行內(nèi)存分配和釋放,一個string可以只包含一個字母也可以包含一本書,Lua可以高效的處理長字符串,1M的string在Lua中是很常見的??梢允褂脝我柣蛘唠p引號表示字符串
a = "a line"
b = 'another line'
為了風(fēng)格統(tǒng)一,最好使用一種,除非兩種引號嵌套情況。對于字符串中含有引號的情況還可以使用轉(zhuǎn)義符\來表示。Lua中的轉(zhuǎn)義序列有:
\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 -- 右中括號
例子:
> print("one line\nnext line\n\"in quotes\", 'in quotes'")
one line
next line
"in quotes", 'in quotes'
> print('a backslash inside quotes: \'\\\'')
a backslash inside quotes: '\'
> print("a simpler way: '\\'")
a simpler way: '\'
還可以在字符串中使用\ddd(ddd為三位十進制數(shù)字)方式表示字母。
"alo\n123\""和'\97lo\10\04923"'是相同的。
還可以使用[[...]]表示字符串。這種形式的字符串可以包含多行也,可以嵌套且不會解釋轉(zhuǎn)義序列,如果第一個字符是換行符會被自動忽略掉。這種形式的字符串用來包含一段代碼是非常方便的。
page = [[
An HTML PageLua
[[a text between double brackets]]
]]
io.write(page)
運行時,Lua會自動在string和numbers之間自動進行類型轉(zhuǎn)換,當一個字符串使用算術(shù)操作符時,string就會被轉(zhuǎn)成數(shù)字。
print("10" + 1) --> 11
print("10 + 1") --> 10 + 1
print("-5.3e - 10" * "2") --> -1.06e-09
print("hello" + 1) -- ERROR (cannot convert "hello")
反過來,當Lua期望一個string而碰到數(shù)字時,會將數(shù)字轉(zhuǎn)成string。
print(10 .. 20) --> 1020
..在Lua中是字符串連接符,當在一個數(shù)字后面寫..時,必須加上空格以防止被解釋錯。
盡管字符串和數(shù)字可以自動轉(zhuǎn)換,但兩者是不同的,像10 == "10"這樣的比較永遠都是錯的。如果需要顯式將string轉(zhuǎn)成數(shù)字可以使用函數(shù)tonumber(),如果string不是正確的數(shù)字該函數(shù)將返回nil。
line = io.read() -- read a line
n = tonumber(line) -- try to convert it to a number
if n == nil then
error(line .. " is not a valid number")
else
print(n*2)
end
反之,可以調(diào)用tostring()將數(shù)字轉(zhuǎn)成字符串,這種轉(zhuǎn)換一直有效:
print(tostring(10) == "10") --> true
print(10 .. "" == "10") --> true
3.2 關(guān)系運算符
< > <= >= == ~=
這些操作符返回結(jié)果為false或者true;==和~=比較兩個值,如果兩個值類型不同,Lua認為兩者不同;nil只和自己相等。Lua通過引用比較tables、userdata、functions。也就是說當且僅當兩者表示同一個對象時相等。
a = {}; a.x = 1; a.y = 0
b = {}; b.x = 1; b.y = 0
c = a
a==c but a~=b
Lua比較數(shù)字按傳統(tǒng)的數(shù)字大小進行,比較字符串按字母的順序進行,但是字母順序依賴于本地環(huán)境。
當比較不同類型的值的時候要特別注意:
"0" == 0 -- false
2 < 15 -- true
"2" < "15" -- false (alphabetical order!)
為了避免不一致的結(jié)果,混合比較數(shù)字和字符串,Lua會報錯,比如:2 < "15"
3.3 邏輯運算符
and or not
邏輯運算符認為false和nil是假(false),其他為真,0也是true.
and和or的運算結(jié)果不是true和false,而是和它的兩個操作數(shù)相關(guān)。
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語言中的三元運算符
a ? b : c
在Lua中可以這樣實現(xiàn):
(a and b) or c
not的結(jié)果只返回false或者true
print(not nil) --> true
print(not false) --> true
print(not 0) --> false
print(not not nil) --> false
3.4 連接運算符
.. --兩個點
字符串連接,如果操作數(shù)為數(shù)字,Lua將數(shù)字轉(zhuǎn)成字符串。
print("Hello " .. "World") --> Hello World
print(0 .. 1) --> 01
3.5 優(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)
總結(jié)
以上是生活随笔為你收集整理的lua php 触摸精灵,lua程序设计主要学习路径的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 这次要玩真的了?FF 91准量产车已抵沪
- 下一篇: 看看你的工作会被取代吗?ChatGPT时