多多色-多人伦交性欧美在线观看-多人伦精品一区二区三区视频-多色视频-免费黄色视屏网站-免费黄色在线

中國最全I(xiàn)T社區(qū)平臺(tái) 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2

lua教程

Lua 學(xué)習(xí)筆記之一(初階話題)

閱讀 (2405)

前言

本文針對(duì)的讀者是有經(jīng)驗(yàn)的C/C++程序員,希望了解Lua或者迅速抓住Lua的關(guān)鍵概念和模式進(jìn)行開發(fā)的。因此本文并不打算教給讀者條件語句的語法或者函數(shù)定義的方式等等顯而易見的東西,以及一些諸如變量、函數(shù)等編程語言的基本概念。本文只打算告訴讀者Lua那些與C/C++顯著不同的東西以及它們實(shí)際上帶來了怎樣不同于C/C++的思考方式。不要小看它們,它們即將顛覆你傳統(tǒng)的C/C++的世界觀!

本文一共分初階進(jìn)階高階三大部分,每個(gè)部分又有若干章節(jié)。讀者應(yīng)當(dāng)從頭至尾循序漸進(jìn)的閱讀,但是標(biāo)有“*”號(hào)的章節(jié)(主要討論OO在Lua中的實(shí)現(xiàn)方式)可以略去而不影響對(duì)后面內(nèi)容的理解。讀者只要把前兩部分完成就可以勝任Lua開發(fā)的絕大部分任務(wù)。高階部分可作為選擇。

初階話題

1.八種基本類型: 如下表 

基本類型

描述

備注

數(shù)值(number)

內(nèi)部以double表示

 

字符串(string)

 

總是以零結(jié)尾,但可以包含任意字符(包括零),因此并不等價(jià)于C字符串, 而是其超集

 

布爾(boolean)

只有“true”或者“false”兩個(gè)值。

 

函數(shù)(function)

 

Lua的關(guān)鍵概念之一。不簡(jiǎn)單等同于C的函數(shù)或函數(shù)指針。

 

表(table)

異構(gòu)的Hash表。Lua的關(guān)鍵概念之一。

 

userdata

 

用戶(非腳本用戶)定義的C數(shù)據(jù)結(jié)構(gòu)。腳本用戶只能使用它,不能定義。

 

線程(thread)

 

Lua協(xié)作線程(coroutine),與一般操作系統(tǒng)的搶占式線程不一樣。

 

nil

 

代表什么也沒有,可以與C的NULL作類比,但它不是空指針。

 

 2.函數(shù)

2.1 實(shí)例代碼

    function foo(a,b,c,...)  
        local sum = a+b
        return sum,c  --函數(shù)可以返回多個(gè)值
    end

    r1,r2 = foo(1,"123","hello")--平行賦值
    print(r1,r2);

輸出結(jié)果:

124 hello 

2.2 函數(shù)基本使用方法

  • 函數(shù)定義:

用關(guān)鍵字function定義函數(shù),以關(guān)鍵字end結(jié)束

  • 局部變量:

用關(guān)鍵字local定義。如果沒有用local定義,即使在函數(shù)內(nèi)部定義的變量也是全局變量!

  • 函數(shù)可以返回多個(gè)值:

return a, b, c, ...

  • 平行賦值:

a, b = c, d

  • 全局變量:

前面的代碼定義了三個(gè)全局變量:foo、r1和r2 

3.表

3.1 實(shí)現(xiàn)代碼

    local a = {}
    local b = {x = 1,["hello,"] = "world!"}
    a["astring"] = "ni,hao!"
    a[1] = 100
    a["a table"] = b

    for k,v in  pairs(a) do
        print(k,"=>",v);
    end

輸出結(jié)果:

1=>100

astring=>ni,hao!

a table=>table: 0xfd59570

3.2 表使用方法

  • 定義表(Table)的方式

a = {}, b = {...}

  • 訪問表的成員

通過“.”或者“[]”運(yùn)算符來訪問表的成員。

注意:表達(dá)式a.b等價(jià)于a[“b”],但不等價(jià)于a[b]

  • 表項(xiàng)的鍵和值

    任何類型的變量,除了nil,都可以做為表項(xiàng)的鍵。從簡(jiǎn)單的數(shù)值、字符串到復(fù)雜的函數(shù)、表等等都可以;同樣,任何類型的變量,除了nil,都可以作為表項(xiàng)的值。給一個(gè)表項(xiàng)的值賦nil意味著從表中刪除這一項(xiàng),比如令a.b= nil,則把表a中鍵為“b”的項(xiàng)刪除。如果訪問一個(gè)不存在的表項(xiàng),其值也是nil,比如有c = a.b,但表a中沒有鍵為“b”的項(xiàng),則c等于nil。 

4.一種簡(jiǎn)單的對(duì)象實(shí)現(xiàn)方式 

4.1 實(shí)現(xiàn)代碼

    function create(name,id)
        local obj = {name = name,id = id}

        function obj:SetName(name)
            self.name = name 
        end

        function obj:GetName()
            return self.name
        end

        function obj:SetId(id)
            self.id = id
        end

        function obj:GetId()
            return self.id
        end
        return obj
    end

    local myCreate = create("sam",001)

    for k,v in pairs(myCreate) do
        print(k,"=>",v)
    end

    print("myCreate's name:",myCreate:GetName(),"myCreate's id:",myCreate.GetId(myCreate))

    myCreate:SetId(100)
    myCreate:SetName("Hello Kity")

    print("myCreate's name:",myCreate:GetName(),"myCreate's id:",myCreate:GetId())

SetName=>function: 0x85efc50

GetId=>function: 0x85efc10

id=>1

SetId=>function: 0x85efd00

GetName=>function: 0x85efce0

name=>sam

myCreate's name:sammyCreate's id:1

myCreate's name:Hello KitymyCreate's id:100

4.2對(duì)象實(shí)現(xiàn)描述

  • 對(duì)象工廠模式

如前面代碼的create函數(shù)

  • 用表來表示對(duì)象

把對(duì)象的數(shù)據(jù)和方法都放在一張表內(nèi),雖然沒有隱藏私有成員,但對(duì)于簡(jiǎn)單腳本來說完全可以接受。

  • 成員方法的定義

    function obj:method(a1, a2, ...) ... end 等價(jià)于function obj.method(self, a1, a2, ...) ... end 等價(jià)于obj.method = function (self, a1, a2, ...) ... end

  • 成員方法的調(diào)用

obj:method(a1, a2, ...) 等價(jià)于obj.method(obj, a1, a2, ...) 

5.簡(jiǎn)單繼承

5.1  實(shí)現(xiàn)代碼

    local function CreateRobot(name,id)
        local obj = {name = name,id = id}

        function obj:SetName(name)
            self.name = name
        end

        function obj:GetName()
            return self.name
        end

        function obj:SetId(id)
            self.id = id
        end

        function obj:GetId()
            return self.id
        end
        return obj
    end

    local function createFootballRobot(name ,id ,position)
        local obj = CreateRobot(name ,id)
        obj.position = "right back"

        

←上一篇: Lua 拓展閱讀
關(guān)閉
程序員人生
主站蜘蛛池模板: 一区二区3区免费视频 | 免费v片视频在线观看视频 免费v片在线观看 | 日本特黄特黄刺激大片免费 | 亚洲精品国产一区二区图片欧美 | 精品福利一区二区三区免费视频 | 国产一级性片 | 性欧美高清久久久久久久 | 国产国语一级a毛片高清视频 | 2018av在线 | 欧美jizz18性欧美年轻 | 精品久久香蕉国产线看观看亚洲 | 国产手机在线αⅴ片无码观看 | 免费福利网站在线观看 | 日本不卡在线一区二区三区视频 | 九色国产 | 国产免费一区二区三区在线观看 | 综合五月网 | 国产理论自拍 | 国产成人一区二区三区精品久久 | 成人久久伊人精品伊人 | 伊人色在线观看 | 一级中文字幕乱码免费 | 五月天在线播放视频在线 | 亚洲女人被黑人巨大进入 | 性受视频 | 成年人精品视频 | 欧美成人亚洲国产精品 | 亚洲九九爱| 国产福利网站 | 欧美jizzjizz在线播放 | 91国色 | 拍拍拍免费高清在线观看视频 | 日韩欧美片 | 亚洲v天堂v手机在线观看 | 三浦惠理子中文字幕在线一区二区 | 在线中文字幕精品第5页 | 亚洲欲色 | 国产成人精品无缓存在线播放 | 久久久久国产精品 | 国内自拍视频在线播放 | 国产91精品福利在线观看 |