<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                Lua是一個動態類型的語言,沒有類型定義,每個值都有自己的類型。 Lua有8個基本類型,nil, boolean, number, string, userdata, function, thread, table,利用type函數可以打印出一個給定值的類型。 ![](https://box.kancloud.cn/2016-09-06_57ce5eed8bab5.PNG) 注意最后一行,無論x為什么值,結果一定是string,因為type函數的結果總是一個string。 變量沒有預定義的類型,任何變量可以有任何類型的值 ![](https://box.kancloud.cn/2016-09-06_57ce5eed9f100.PNG) 注意最后兩行,函數也是可以用來賦值的,你可以像對待其他的變量一樣來把函數當成一個變量。 通常情況下,如果你把一個變量用來包含不同類型的值,會使代碼看起來很混亂。但是,有時有效地利用這個特性,會有意想不到的效果。例如使用nil來對函數的返回值就行判斷,來區分一個正常的返回值還是一個異常條件。 ## 1 Nil Nil類型只有一個值,nil,跟其他任何值都不同。如我們之前看到的,在一個全局變量未被賦值之前,它的值為nil,你也可以通過將一個全局變量賦值為nil來刪除它。Lua用nil作為一個無值類型,表示一個變量不再起作用。 ## 2 Booleans Boolean類型含有兩個值,true和false。但是Lua中可以表示條件的變量不僅僅boolean類型,任何值都可以表示條件。Lua認為false和nil為"假",其他任何值都是"真"。注意,跟其他語言不同的是,Lua認為0和空字符串為"真"。 ## 3 Numbers Number類型代表實數(在計算機中占兩個地址的浮點數)。Lua沒有整型,并且也不需要。有個普遍的誤解,使用浮點型會有算術錯誤,一些人害怕浮點型即使一個簡單的“加”運算也會有奇奇怪怪的問題。但事實上,用一個double類型來表示一個integer,不存在任何邊界問題(除非這個數大于1.0e14)。Lua可以表示任何的32-bit的整數,不存在任何邊界問題。除此之外,大多數cpu處理浮點數會比整數要快。 不過,Lua為了編譯方便,也使用了其他的number類型,例如long和單浮點數。這是為了兼容一些不支持double類型的設備。 以下這些numeric常量都是合法的 4 0.4 4.57e-3 0.3e12 5e+20 ## 4 Strings String在Lua中與其他編程語言沒有什么不同,都是表示一串字符。但是Lua可以在字符串中含有任何字符,包括0. String在Lua中不可被更改,是常量。你不能更改一個字符串中的某一個字符,但是可以創建一個新的string。例如 ![](https://box.kancloud.cn/2016-09-06_57ce5eedb1d42.PNG) Lua的string是自動管理內存的,其他的lua對象(例如table, function,etc)也一樣。這意味著你不必擔心string的內存分配與釋放,讓Lua為你處理這些問題就好了。一個string可以包含一個字符,也可以包含一整本書,Lua可以有效地處理長string,處理100k-1M的字符串,對Lua來說是小菜一碟。 ### 4.1 Lua string的劃界 上面說了,Lua的string可以包含任何字符,甚至0(在C中,0是被認為是string的結尾的)。因此Lua對字符串邊界的判定,不能用0,而是匹配單引號'或者雙引號" : ![](https://box.kancloud.cn/2016-09-06_57ce5eedc53ba.PNG) 但是在編程的時候,為了風格統一,最后是只用其中一種,除非string本身含有引號。或者在字符串中用轉義字符。Lua的string可以使用以下C風格的轉義字符: \a ? ??bell \b ? ??back space \f ? ? form feed \n ? ?newline \r ? ??carriage return \t ? ??horizontal tab \v ? ??vertical tab \\ ? ??backslash \" ? ??double quote \' ? ? ?single quote 示例如下: ![](https://box.kancloud.cn/2016-09-06_57ce5eedd9dc7.PNG) 我們可以在string中用一個字符的ASCII值來表示它,格式為\ddd,這里ddd最多包含3個數字字符,例如: ![](https://box.kancloud.cn/2016-09-06_57ce5eedefecd.PNG) 97表示"a", 10表示new line,49表示數字"1",注意\049沒有寫成\49的原因是,后面跟的字符是數字,若寫成\49,那么會被認為是\492,這就不是我們想要的了。 對string劃界,除了匹配引號之外,我們可以像處理長注釋一樣,匹配兩個“[[”“]]”。使用這種劃界方式的string通常會有幾行,如果第一個字符是“換行符”,則會被忽略掉,并且不會解釋轉義字符(如下示例),保持原樣輸出。通常在string中包含代碼片段的時候使用比較方便。 ![](https://box.kancloud.cn/2016-09-06_57ce5eee10a5e.PNG) 這個時候,有個疑問,如果我的string中含有“[[”或者“]]”,怎么辦。Lua提供了一個更方便的解決辦法,就是使用類似[====[這樣的匹配符號,“=”個數任意,但是保證前后相同,如果“=”個數不同,那么就會被忽略掉。 ![](https://box.kancloud.cn/2016-09-06_57ce5eee2645f.PNG) 這種方式也可以用在長注釋中,這里就不演示了。 ### 4.2 Lua中string與number的相互轉換 Lua提供了string和number的運行時自動轉換。任何對string進行的算術操作,都會嘗試將string轉換為number。例如: ![](https://box.kancloud.cn/2016-09-06_57ce5eee3dfc1.PNG) 除了算術操作,其他任何期待一個number的地方,如果傳入string,都是嘗試將string轉換為number。相反,在一個期待string的地方,如果傳入number,那么也會嘗試將number轉換為string。 ![](https://box.kancloud.cn/2016-09-06_57ce5eee52f2d.PNG) “..”是Lua中的字符串連接符,在10之后要有一個空格“ ”,否則第一個“.”會被看作是小數點。 現在看來,在Lua的設計中,支持這些自動轉換是不是一個good idea,都沒有一個定論。但是,不要太指望它們。它們在少數場合用起來很方便,但是會增加語言的復雜性,增加使用它們的程序的復雜性。畢竟string和number是兩個不同的東西。10 == “10”是false,因為10是一個number,而“10”是一個string。如果你想把string轉換為number,顯式地用函數tonumber,如果要轉換的string不能被轉為number,它返回nil。 ![](https://box.kancloud.cn/2016-09-06_57ce5eee6eba6.PNG) 將number轉換為string,可以用函數tostring。另外,可以用“#”來取得一個string的長度。 ![](https://box.kancloud.cn/2016-09-06_57ce5eee832f8.PNG) 水平有限,如果有朋友發現錯誤,歡迎留言交流。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看