中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Lua(2) ——基礎語法

發布時間:2020-07-28 11:03:27 來源:網絡 閱讀:8851 作者:shahdza 欄目:開發技術

【嘮叨】

    首先,我已經默認你已經學過至少一門宿主語言了(C++、Java等),然后轉向學習Lua。

    因為51cto中對于Lua語言沒有代碼高亮,為了讓代碼看起來豐富多彩,我只好用截圖了。Lua(2) ——基礎語法


    本節內容僅介紹Lua的簡單基礎語法,更多用法請百度:Lua中文教程 、 Lua參考手冊 。

    基于Lua 5.1。


【學習感慨】

    > 語句末尾不需要加分號 ; 

    > 語句塊不是用花括號 { } , 而是 do 語句塊 end 表示語句塊的開始和結束。

        而 花括號 {} 表示的為一個 表結構 。

    > 運算符 ^  :表示冪運算。(即 2^10 = 1024)

    > 不等于號為: ~=

    > 變量的定義不需要加數據類型。直接 a = 10。

    > 且(and)、或(or)的運算返回值不是true/false而是運算符左邊或右邊的變量值

    > 除了 nilfalse ,其余的均為真。( 0 和 空串"" 也為真)。

    > 變量的賦值可以多個一起賦值。( a,b,c = 10,20,30 )。

    > 函數可以返回多個值。( return a,b,c

    > Lua中數據結構類型只有唯一的一個:表(table)

        它既可以表示一個數組,也可以是一個數據結構,或者是一個類。

    > 數組下標從 1 開始,而不是 0 。


【致謝】

    《Programming in Lua》中文版 , 翻譯由 www.luachina.net 完成。




0、Lua環境配置

    可以去lua官網 www.lua.org  下載資源文件,然后在文本編輯器來編寫。

    也可以使用 eclipse ,下載 ldt 插件,就可以在 eclipse 中編寫Lua的代碼了。


0、Lua的一個例子

    先來看看Lua的一個例子,圖個新鮮。Lua(2) ——基礎語法

    注:下面的代碼是可以直接運行的。對,不需要main函數!

Lua(2) ——基礎語法


0、導入文件 require

    搜索目錄加載文件,并判斷是否文件是否已經加載,避免重復加載同一文件。

    其中:".lua" 可以省略。

    require "hello.lua"

    require("hello2")

    require "hello3"


1、數據類型

    > 在Lua中,定義一個變量的時候,不需要寫數據類型

    > Lua中就直接這樣定義:a = 10; b = "Hello World" 。

    Lua(2) ——基礎語法


2、注釋

    (1)單行注釋: --

    (2)多行注釋: --[[    --]]

    Lua(2) ——基礎語法


3、輸出語句

    Lua(2) ——基礎語法


4、保留關鍵字

    Lua(2) ——基礎語法


5、運算符


 5.1、算術運算符

    > 其中 ^冪運算

    Lua(2) ——基礎語法


 5.2、關系運算符

    > 其中 ~=不等于

    Lua(2) ——基礎語法


 5.3、邏輯運算符

    > Lua里的邏輯運算符不是返回 true/false ,而是 a 或者 b。

    > 其中,三目運算符可以表示成如下所示。

    Lua(2) ——基礎語法

    使用舉例:

        a = 10。

        (1)第一個判斷:a>=0為真,故表達式返回的值為 a<=5 

                而a<=5為假,所以 a>=0 and a<=5 為假,不執行print("111")

        (2)繼續判斷第二個,a<=9為假,故表達式返回值為 a>=11 

                而a>=11為假,所以 a<=9 or a>=11 為假,不執行print("222")

        (3)其余情況,執行 print("333")

        Lua(2) ——基礎語法


 5.4、拼接運算符

    > 兩個點 .. 為字符串的拼接運算。

    Lua(2) ——基礎語法


 5.5、優先級

    > 其中 ^ 和 .. 為右鏈接,其余為從左到右依次運算。

    > 優先級如下:Lua(2) ——基礎語法


6、變量賦值、以及作用域


    (1)局部變量(local)、全局變量。

    Lua(2) ——基礎語法


    (2)多重賦值

        > 賦值等號左邊為變量,右邊為所賦的值。會按順序依次賦值。

    Lua(2) ——基礎語法


7、代碼塊

    > 使用 do end

    Lua(2) ——基礎語法


8、控制語句

    

    這里可能涉及到表(table)的知識,這個在后續會介紹。


 8.1、條件語句 if-else-then

    > elseif 中間沒有空格。

    > 不要忘了后面的 then

    Lua(2) ——基礎語法


 8.2、循環語句 while-do

    > 和C++中的用法類似。

    Lua(2) ——基礎語法


 8.3、循環語句 repeat-until

    > 和C++中的 do-while 用法類似。

    Lua(2) ——基礎語法


 8.4、循環語句 for-do

    使用for循環語句是Lua中最常用的。


    (1)用法一:數值遍歷

    Lua(2) ——基礎語法


    (2)用法二:數組遍歷

    Lua(2) ——基礎語法


    (3)用法三:數組遍歷(ipairs)

        > 使用 for key, var in ipairs(t) do    end

    Lua(2) ——基礎語法


    (4)用法四:表遍歷(pairs)

        > 遍歷整張表,輸出表中所有數據。

        > 使用 for key, var in pairs(t) do    end

    Lua(2) ——基礎語法


    (5)ipairs 與 pairs 的區別

        > ipairs :主要用于表數組的遍歷,即表的下標均為正整數,且從1~n連續。

                    不能返回nil,只能返回數字0,如果遇到nil則推出。

                    它只能遍歷到表中出現的第一個不是整數的鍵。

        > pairs  :用于遍歷整張表。

                    可以遍歷表中所有的鍵,且除了迭代器本身以及遍歷表本身還可以返回nil


9、函數 function

    函數的定義如下:

    (1)function 函數名(參數列表) 語句塊 end

    (2)函數名 = function(參數列表) 語句塊 end

    Lua(2) ——基礎語法


 9.1、可變參數

    在函數的參數列表最后面使用三個點 ... ,表示輸入參數可變。

    而可變的參數會保存在一個表數組 arg 中。

    Lua(2) ——基礎語法


 9.2、多返回值

    函數可以返回多個值。

    舉例說明:

    Lua(2) ——基礎語法


 9.3、函數多返回值的丟失

    -- :如果fun為表達式最后一個所有返回值將被返回

    -- :如果fun不是最后一個    只有第一個值被返回

    Lua(2) ——基礎語法


 9.4、函數閉包

    先來看一下閉包的一個例子。

    Lua(2) ——基礎語法

    我們可以發現newCounter()里有一個局部變量i,并且函數的返回值是閉包內的函數

    (1)定義:

        > newCounter()      :父函數;

        > 局部變量i         :父函數內的局部變量;

        > 返回值匿名函數    :父函數內的子函數。

    (2)函數返回值為一個子函數,且子函數可以使用父函數內的局部變量i。

    如果你知道了Lua中的函數也可以像變量一樣進行賦值的話,你就不難理解上訴的三個print的輸出為什么是那樣的。

    實際上,上訴代碼中的 c1 和 c2 被賦予的值就是閉包內的匿名函數。而執行 c1()、c2() 就相當于是調用一次閉包newCounter()中的匿名函數。

    這就類似創建了一個C++類的實例對象(假設實例對象名為obj)。

    類里面有一個成員變量i,以及一個成員函數。而c1()指向的是該實例對象中的成員函數。

    所以每調用一次c1(),就相當于是執行了一次 obj->匿名函數() 。這樣就改變了對象obj里的成員變量i的值。

    而Lua閉包中創建的 c1、c2 就相當于是創建了兩個這樣的實例對象(obj1,obj2)。所以每執行它們一次,對象內部的變量i的值都會發生變化。

    也有這樣的一個比喻:Lua中的閉包類似于一個C++函數,而函數內部的變量i相當于是一個函數中的靜態變量。


    再來一個例子:(有了上述形象的類比,相信你能看懂下面的代碼)

    Lua(2) ——基礎語法

    這就相當于創建了一個C++類的實例對象obj。

    類里面有一個成員變量i,以及兩個成員函數InnerFunc1()、和InnerFunc2()。

    而 a、b 分別指向的是該實例對象obj中的成員函數InnerFunc1()、和InnerFunc2()。

    調用一次 a() :就相當于是執行了一次obj->InnerFunc1() 。

    調用一次 b() :就相當于是執行了一次obj->InnerFunc2() 。


10、表(table)

    Lua中的數據結構只有一個:表(table)。

    原理:鍵值對 key - value


 10.1、表示一個數組

    前提條件為:數組的下標均為正整數,且連續賦值。

    并且在Lua中,數組的下標從 1 開始。( t[1] , t[2] , t[3] ...)

    (1)數組的定義:

            t = { 值1 , 值2 , 值3 , ... , 值n }

    (2)獲取數組元素個數:使用 # 

            #t

    舉例:

    Lua(2) ——基礎語法


 10.2、表的用法

    (1)初始化賦值

    Lua(2) ——基礎語法


    (2)表成員的使用方法

    Lua(2) ——基礎語法

    

    (3)補充

        下標不一定是整數或字符串,也可以使浮點數。

            t = { [91.23] = true }

            t[91.23] = false



【補充知識】


1、兩個對象的比較

"0" == 0        -- false
2 < 15          -- true
"2" < "15"      -- false (字典序)


2、數值與字符串運算(+-*/)

    string 和 numbers 進行運算時,string會被轉化成數值進行運算

print("10" + 1)         --> 11
print("10" + "1")       --> 11
print("20" * "3")       --> 60

-- 拼接運算符
print("10" .. 1)        --> 101


3、求數組的長度(使用 #)

a = {1,2,3,4,5}
print(#a)        -- 5




    基礎語法講完了,請待下回分解。。。


向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

卓资县| 林口县| 德阳市| 黄浦区| 衡阳县| 溧阳市| 望都县| 措勤县| 随州市| 克山县| 佛坪县| 北安市| 邻水| 志丹县| 郯城县| 区。| 五大连池市| 中卫市| 福州市| 三台县| 甘肃省| 徐州市| 保靖县| 彭山县| 宝鸡市| 英超| 达尔| 靖州| 洱源县| 德阳市| 金寨县| 博野县| 河北区| 皮山县| 平果县| 莆田市| 延安市| 江西省| 晋宁县| 方正县| 郴州市|