青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

每天早晨叫醒你的不是鬧鐘,而是夢想

  C++博客 :: 首頁 :: 聯系 :: 聚合  :: 管理
  62 Posts :: 0 Stories :: 5 Comments :: 0 Trackbacks

常用鏈接

留言簿(1)

我參與的團隊

搜索

  •  

最新評論

閱讀排行榜

評論排行榜

一、基礎知識:

    1. 第一個程序和函數:
    在目前這個學習階段,運行Lua程序最好的方式就是通過Lua自帶的解釋器程序,如:
    /> lua
    > print("Hello World")
    Hello World
    這樣我們就可以以交互性的方式輸入lua代碼,并立即得到執行結果了。對于代碼塊較少的測試程序來說,這種方式確實是非常方便的,然而對于相對復雜的程序而言,這種方式就不是很合適了。如果是這樣,我們可以將Lua代碼保存到一個獨立的Lua程序文件中,之后再通過Lua解釋器程序以命令行參數的形式執行文件中的Lua代碼。如我們將下面的Lua代碼保存到test.lua的文件中:

復制代碼
 1 function fact(n)
2 if n == 0 then
3 return 1
4 else
5 return n * fact(n - 1)
6 end
7 end
8 print("Enter a number:")
9 a = io.read("*number")
10 print(fact(a))
復制代碼

    /> lua D:/test.lua
    Enter a number:
    4
    24

    2. 代碼規范:
    1). Lua的多條語句之間并不要求任何分隔符,如C語言的分號(;),其中換行符也同樣不能起到語句分隔的作用。因此下面的寫法均是合法的。如:

復制代碼
1 a = 1
2 b = a * 2
3
4 a = 1;
5 b = a * 2;
6
7 a = 1; b = a * 2;
8 a = 1 b = a * 2
復制代碼

    2). 通過dofile()方法引用其他Lua文件中的函數,如:

復制代碼
1 function fact(n)
2 if n == 0 then
3 return 1
4 else
5 return n * fact(n - 1)
6 end
7 end
復制代碼

    將上面的函數保存到test2.lua文件中。
    /> lua
    > dofile("d:/test2.lua")
    > print(fact(4))
    24
    3). 詞法規范。
    和大多數其它語言一樣,在聲明變量時,變量名可以由任意字母、數字和下劃線構成,但是不能以數字開頭。在Lua中還有一個特殊的規則,即以下劃線(_)開頭,后面緊隨多個大寫字母(_VERSION),這些變量一般被Lua保留并用于特殊用途,因此我們在聲明變量時需要盡量避免這樣的聲明方式,以免給后期的維護帶來不必要的麻煩。
    Lua是大小寫敏感的,因此對于一些Lua保留關鍵字的使用要特別小心,如and。但是And和AND則不是Lua的保留字。
    4). Lua中的注釋分為兩種,一種是單行注釋,如:
    --This is a single line comment.
    另外一種是多行注釋,如:
    --[[
    This is a multi-lines comment.
    --]]

    3. 全局變量:
    在Lua中全局變量不需要聲明,直接賦值即可。如果直接訪問未初始化的全局變量,Lua也不會報錯,直接返回nil。如果不想再使用該全局變量,可直接將其置為nil。如:
    /> lua
    > print(b)
    nil
    > b = 10
    > print(b)
    10
    > b = nil
    > print(b)
    nil
    
    4. 解釋器程序:
    命令行用法如下:
    lua [options] [lua-script [arguments] ]
    該工具的命令行選項主要有以下3個:
    -e: 可以直接執行命令行中Lua代碼,如:lua -e "print(\"Hello World\")"
    -l: 加載該選項后的Lua庫文件,如:lua -l mylib -e "x = 10",該命令在執行之前先將mylib中的Lua代碼加載到內存中,在后面的命令中就可以直接使用該文件中定義的Lua函數了。
    -i: 在執行完指定的Lua程序文件之后,并不退出解釋器程序,而是直接進入該程序的交互模式。    
    在解釋器程序的交互模式下,我們可以通過在表達式前加等號(=)標識符的方式直接輸出表達式的執行結果。通過該方式,我們可以將該程序用于計算器,如:
    /> lua
    > = 3 + 1 + 4
    8
    該小節最后需要介紹的是lua腳本的命令行參數訪問規則。如:
    /> lua lua-script.lua a b c
    在該腳本的程序入口,lua解釋器會將所有命令行參數創建一個名為arg的table。其中腳本名(lua-script.lua)位于table索引的0位置上。它的第一個參數(a)則位于索引1,其它的參數以此類推。這種索引方式和C語言中讀取命令行參數的規則相同。但是不同的是,Lua提供了負數索引,用以訪問腳本名稱之前的命令行參數,如:
    arg[-1] = lua
    arg[0] = lua-script.lua
    arg[1] = a
    arg[2] = b
    arg[3] = c

二、類型與值:

    Lua是一種動態類型的語言。其語言本身沒有提供類型定義的語法,每個值都“攜帶”了它自身的類型信息。在Lua中有8中基礎類型,分別是:nil、boolean、number、string、userdata、function、thread和table。我們可以通過type函數獲得變量的類型信息,該類型信息將以字符串的形式返回。如:
    > print(type("hello world"))
    string
    > print(type(10.4))
    number
    > print(type(print))
    function
    > print(type(true))
    boolean
    > print(type(nil))
    nil
    > print(type(type(X)))
    string

    1. nil(空):
    nil是一種類型,它只有一個值nil,它的主要功能是由于區別其他任何值。就像之前所說的,一個全局變量在第一次賦值前的默認值的默認值就是nil,將nil賦予一個全局變量等同于刪除它。Lua將nil用于表示一種“無效值”的情況。
    
    2. boolean(布爾):
    該類型有兩個可選值:false和true。在Lua中只有當值是false和nil時才視為“假”,其它值均視為真,如數字零和空字符串,這一點和C語言是不同的。
    
    3. number(數字):
    Lua中的number用于表示實數。Lua中沒有專門的類型表示整數。
    
    4. string(字符串):
    Lua中的字符串通常表示“一個字符序列”。字符串類型的變量是不可變的,因此不能像C語言中那樣直接修改字符串的某一個字符,而是在修改的同時創建了新的字符串。如:

1 a = "one string"
2 b = string.gsub(a,"one","another")
3 print(a)
4 print(b)

    /> lua d:/test.lua    
    one string
    anotner string
    Lua支持和C語言類似的字符轉義序列,見下表:

轉義符描述
\a響鈴
\b退格
\n換行
\r回車
\t水平Tab
\\反斜杠
\"雙引號
\'單引號

    在Lua中還可以通過[[ all strings ]]的方式來禁用[[ ]]中轉義字符,如:
    page = [[ <html> <head> <title> An Html Page </title> </head> ]]
    如果兩個方括號中包含這樣的內容:a = b[c[i]],這樣將會導致Lua的誤解析,因此在這種情況下,我們可以將其改為[===[ 和 ]===]的形式,從而避免了誤解析的發生。
    Lua提供了運行時的數字與字符串的自動轉換。如:
    > print("10" + 1)
    11
    > print("10 + 1")
    10 + 1
    如果在實際編程中,不希望兩個數字字符串被自動轉換,而是實現字符串之間的連接,可以通過" .. "操作符來完成。如:
    > print(10 .. 20)
    1020
    注意..和兩邊的數字之間必須留有空格,否則就會被Lua誤解析為小數點兒。
    盡管Lua提供了這種自動轉換的功能,為了避免一些不可預測的行為發生,特別是因為Lua版本升級而導致的行為不一致現象。鑒于此,還是應該盡可能使用顯示的轉換,如字符串轉數字的函數tonumber(),或者是數字轉字符串的函數tostring()。對于前者,如果函數參數不能轉換為數字,該函數返回nil。如:

復制代碼
1 line = io.read()
2 n = tonumber(line)
3 if n == nil then
4 error(line .. " is not a valid number")
5 else
6 print(n * 2)
7 end
復制代碼

    關于Lua的字符串最后需要介紹的是"#"標識符,該標識符在字符串變量的前面將返回其后字符串的長度,如:

1 a = "hello"
2 print(#a)

    /> lua d:/test.lua
    5
        
    5. table(表):
    我們可以將Lua中table類型視為“關聯數組”,如C++標準庫中的map,差別是Lua中table的鍵(key)可以為任意類型(nil除外),而map中的鍵只能為模參類型。此外,table沒有固定的大小,可以動態的添加任意數量的元素到一個table中。table是Lua中最主要數據結構,其功能非常強大,可用于實現數組、集合、記錄和隊列數據結構。以下為table的變量聲明,以及關聯數據的初始化方式:

復制代碼
1 a = {}              -- 創建一個table對象,并將它的引用存儲到a
2 k = "x"
3 a[k] = 10 -- 創建了新條目,key = "x", value = 10
4 a[20] = "great" -- 新條目,key = 20, value = "great"
5 print(a["x"])
6 k = 20
7 print(a[k]) -- 打印great
8 a["x"] = a["x"] + 1
9 print(a["x"]) -- 打印11
復制代碼

    所有的table都可以用不同類型的索引來訪問value,當需要容納新條目時,table會自動增長。

復制代碼
 1 a = {}
2 for i = 1, 100 do
3 a[i] = i * 2
4 end
5 print(a[9])
6 a["x"] = 10
7 print(a["x"])
8 print(a["y"]) --table中的變量和全局變量一樣,沒有賦值之前均為nil。
9
10 --輸出結果為
11 --18
12 --10
13 --nil
復制代碼

    在Lua中還提供了另外一種方法用于訪問table中的值,見如下示例:

1 a.x = 10      --等同于a["x"] = 10
2 print(a.x) --等同于print(a["x"])
3 print(a.y) --等同于print(a["y"])

    對于Lua來說,這兩種方式是等價的。但是對于開發者而言,點的寫法隱式的將table表示為記錄,既C語言中的結構體。而之前講述的字符串表示法則意味著任何字符串均可作為table的key。
    如果需要將table表示為傳統的數組,只需將整數作為table的key即可。如:

復制代碼
1 a = {}
2 for i = 1,10 do
3 a[i] = i * 2
4 end
5
6 for i = 1,10 do
7 print(a[i])
8 end
復制代碼

    在Lua中,我通常習慣以1作為數組索引的起始值。而且還有不少內部機制依賴于這個慣例。如:

復制代碼
1 a = {}
2 for i = 1,10 do
3 a[i] = i * 2
4 end
5
6 for i = 1,#a do
7 print(a[i])
8 end
復制代碼

    由于數組實際上仍為一個table,所以對于數組大小的計算需要留意某些特殊的場景,如:
    a = {}
    a[1000] = 1
    在上面的示例中,數組a中索引值為1--999的元素的值均為nil。而Lua則將nil作為界定數據結尾的標志。當一個數組含有“空隙”時,即中間含有nil值,長度操作符#會認為這些nil元素就是結尾標志。當然這肯定不是我們想要的結果。因此對于這些含有“空隙”的數組,我們可以通過函數table.maxn()返回table的最大正數索引值。如:

1 a = {}
2 a[1000] = 1
3 print(table.maxn(a))
4
5 -- 輸出1000


    6. function(函數):
    在Lua中,函數可以存儲在變量中,可以通過參數傳遞其它函數,還可以作為其它函數的返回值。這種特性使語言具有了極大的靈活性。

    7. userdata(自定義類型):
    由于userdata類型可以將任意C語言數據存儲到Lua變量中。在Lua中,這種類型沒有太多預定義的操作,只能進行賦值和相等性測試。userdata用于表示一種由應用程序或C語言庫所創建的新類型。

posted on 2014-02-17 17:33 沛沛 閱讀(234) 評論(0)  編輯 收藏 引用 所屬分類: Script
青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            在线精品亚洲一区二区| 久热re这里精品视频在线6| 欧美日韩亚洲一区二区三区在线观看 | 午夜在线播放视频欧美| 日韩视频在线观看| 亚洲精选在线观看| 中文亚洲免费| 欧美一二区视频| 久久嫩草精品久久久久| 久久天天躁狠狠躁夜夜av| 免费看av成人| 国产精品av免费在线观看| 国产情人综合久久777777| 韩日精品中文字幕| 亚洲三级毛片| 午夜在线a亚洲v天堂网2018| 欧美一区二区在线看| 久久全球大尺度高清视频| 欧美国产日韩精品免费观看| 亚洲高清毛片| 亚洲激情在线观看| 亚洲免费在线视频| 欧美xxx在线观看| 国产精品制服诱惑| 亚洲国产精品久久久久婷婷老年| 一本综合久久| 久久久久免费| 日韩亚洲欧美成人一区| 久久成人国产精品| 欧美无乱码久久久免费午夜一区| 国产欧美视频一区二区三区| 亚洲激情在线观看视频免费| 亚洲视频每日更新| 久久夜色精品国产噜噜av| 亚洲精一区二区三区| 久久嫩草精品久久久精品一| 国产精品午夜久久| 一区二区三区国产精品| 欧美h视频在线| 亚洲欧美在线x视频| 欧美日韩色一区| 亚洲人成毛片在线播放女女| 久久久久成人网| 亚洲一区二区三区乱码aⅴ| 欧美成人国产一区二区| 国产欧美一区二区精品性| 中文网丁香综合网| 亚洲国产一区在线| 另类亚洲自拍| 亚洲精品国产精品国自产在线| 久久激情一区| 亚洲视屏在线播放| 欧美日韩成人综合在线一区二区| 精品va天堂亚洲国产| 亚洲欧美一区二区三区在线| 最近看过的日韩成人| 久久乐国产精品| 国内一区二区在线视频观看| 欧美一区二区三区在线看| 亚洲视频一区在线| 欧美色欧美亚洲高清在线视频| 夜夜嗨av色综合久久久综合网| 欧美高清在线观看| 美女国产精品| 亚洲精品视频在线观看网站| 欧美国产亚洲视频| 欧美国产丝袜视频| 亚洲久久成人| 日韩视频永久免费| 国产精品入口麻豆原神| 亚洲欧美日韩爽爽影院| 亚洲香蕉伊综合在人在线视看| 欧美小视频在线| 午夜欧美理论片| 欧美一区二区三区在线观看视频 | 国产亚洲成av人片在线观看桃| 亚洲综合日本| 午夜精品理论片| 国产自产精品| 欧美国产欧美亚洲国产日韩mv天天看完整 | 国产精品h在线观看| 亚洲曰本av电影| 亚洲尤物视频网| 国语自产精品视频在线看一大j8 | 亚洲国产aⅴ天堂久久| 欧美激情女人20p| 亚洲欧美日韩国产一区| 欧美有码在线观看视频| 亚洲国产免费看| 99在线热播精品免费| 国产精品制服诱惑| 欧美成人免费在线| 国产一区二区日韩精品| 欧美日韩国产a| 午夜精品久久久久久99热| 欧美一区2区视频在线观看| 亚洲第一黄色网| 一区二区高清在线观看| 国产欧美精品日韩| 欧美激情在线| 国产伦精品一区二区三区四区免费 | 国产一区二区0| 亚洲国产美女精品久久久久∴| 国产精品久久久久久久久免费| 久久久噜噜噜久久| 欧美日韩在线一区二区| 免费在线观看精品| 欧美三级第一页| 欧美v日韩v国产v| 国产精品最新自拍| 亚洲美女一区| 亚洲成人在线| 欧美一级视频| 亚洲伊人伊色伊影伊综合网| 久久五月激情| 欧美一级播放| 国产精品va在线播放| 欧美激情视频一区二区三区免费 | 欧美在线综合视频| 亚洲小视频在线| 欧美大尺度在线观看| 久久久噜噜噜久久| 国产欧美婷婷中文| 中文日韩在线| 亚洲在线免费观看| 欧美日韩免费精品| 亚洲日本一区二区| 亚洲二区视频在线| 久久久久久一区二区| 久久久久久高潮国产精品视| 国产精品女主播| 艳女tv在线观看国产一区| 亚洲最新色图| 欧美日韩国产在线一区| 亚洲经典三级| 亚洲精品影视在线观看| 免费美女久久99| 亚洲第一久久影院| 91久久精品国产| 欧美成人一区在线| 亚洲国产精品www| 亚洲人永久免费| 欧美激情国产日韩精品一区18| 亚洲第一搞黄网站| 亚洲理伦电影| 欧美剧在线免费观看网站| 亚洲国内高清视频| 欧美一区二区三区另类| 亚洲靠逼com| 久久人人爽爽爽人久久久| 久久久91精品国产一区二区精品| 国产麻豆精品视频| 久久久久久高潮国产精品视| 久久综合色8888| 亚洲国产精品999| 欧美精品日日鲁夜夜添| 中文一区二区在线观看| 久久国产视频网站| 亚洲国产高清视频| 欧美精品免费看| 亚洲午夜激情| 久久久久网址| 日韩午夜精品| 国产精品一区二区久激情瑜伽| 久久se精品一区精品二区| 亚洲第一中文字幕| 亚洲午夜久久久久久久久电影院| 国产精品一区二区三区四区五区| 久久精品国产一区二区三区免费看 | 欧美在线观看视频一区二区| 国语自产精品视频在线看抢先版结局 | 国产精品久久久爽爽爽麻豆色哟哟 | 国产欧美日韩伦理| 麻豆精品精品国产自在97香蕉| 亚洲国产日韩一区| 久久er99精品| 日韩一区二区高清| 国产一区二区三区高清在线观看 | 久久久999成人| 亚洲人成亚洲人成在线观看图片| 国产精品久久久久永久免费观看| 久久久久久久久久久久久女国产乱| 亚洲欧洲精品天堂一级| 久久电影一区| 99国产精品久久久久久久成人热| 国产精品中文在线| 欧美日韩免费在线| 老牛国产精品一区的观看方式| 亚洲婷婷国产精品电影人久久| 猛男gaygay欧美视频| 亚洲欧美国产三级| 亚洲精品国产精品国自产观看浪潮| 国产精品人人做人人爽| 欧美激情一区在线观看| 午夜精品久久久久久久男人的天堂| 在线观看成人网| 国产视频一区免费看| 欧美日韩日日夜夜| 欧美成人国产va精品日本一级| 欧美一区二区三区在线视频|