国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

腳本之家,腳本語言編程技術(shù)及教程分享平臺(tái)!
分類導(dǎo)航

Python|VBS|Ruby|Lua|perl|VBA|Golang|PowerShell|Erlang|autoit|Dos|bat|

服務(wù)器之家 - 腳本之家 - Lua - Lua 極簡(jiǎn)入門指南(七):面向?qū)ο缶幊?

Lua 極簡(jiǎn)入門指南(七):面向?qū)ο缶幊?/h1>

2020-04-16 13:30腳本之家 Lua

這篇文章主要介紹了Lua 極簡(jiǎn)入門指南(七):面向?qū)ο缶幊?本文講解了類和繼承的概念,并給出了編程實(shí)例,需要的朋友可以參考下

在很多面向?qū)ο蟮恼Z言中有類(class)的概念,對(duì)象是類的實(shí)例。Lua 中不存在類的概念。Lua 就像 JavaScript 一樣是面向原型的語言(http://en.wikipedia.org/wiki/Prototype-based_programming),這類語言使用一個(gè)對(duì)象表示一個(gè)“類”,其他對(duì)象(此類的實(shí)例)使用此對(duì)象作為原型。我們有兩個(gè) table p 和 obj,將 p 設(shè)置為 obj 的原型(回顧:http://www.jfrwli.cn/article/57847.html):

 

復(fù)制代碼 代碼如下:

setmetatable(obj, {__index = p})

 

obj 中不存在的操作會(huì)在 p 中查找。

看一個(gè)詳細(xì)的例子:

復(fù)制代碼 代碼如下:

Account = {
    -- 默認(rèn)的 balance 的值
    balance = 0
}
 
function Account:new(o)
    o = o or {}
    -- 設(shè)置原型為 Account
    setmetatable(o, self)
    self.__index = self
    return o
end
 
function Account:deposit(v)
    self.balance = self.balance + v
end
 
function Account:withdraw(v)
    if v > self.balance then
        print('insufficient funds')
        return
    end
    self.balance = self.balance - v
end
 
-- 構(gòu)建 Account 對(duì)象,初始 balance 為 100
local a1 = Account:new{balance = 100}
a1:deposit(100)    --> balance == 200
a1:withdraw(100)   --> balance == 100
 
-- 構(gòu)建 Account 對(duì)象,使用默認(rèn)的 balance
local a2 = Account:new()
a2:deposit(100)    --> balance == 100

 

在方法定義時(shí)使用冒號(hào)能夠添加一個(gè)隱藏的參數(shù) self 給方法,在方法調(diào)用時(shí)使用冒號(hào)能夠?qū)⒄{(diào)用者作為一個(gè)額外的參數(shù)傳遞給此方法,例如:

復(fù)制代碼 代碼如下:

-- 以下兩種寫法等價(jià)
function Account:deposit(v)
function Account.deposit(self, v)
 
-- 以下兩種寫法等價(jià)
a1:deposit(100)
a1.deposit(a1, 100)

 

self 為方法的調(diào)用者。

在 Account 這個(gè)例子中,一個(gè)小優(yōu)化是,我們沒有必要?jiǎng)?chuàng)建一個(gè)額外的 metatable,而直接使用 Account 作為 metatable。

繼承

我們通過一個(gè)例子來解釋 Lua 如何實(shí)現(xiàn)繼承。假定我們需要子類 SpecialAccount 繼承于 Account,SpecialAccount 是可以透支的。

首先構(gòu)造一個(gè)子類:

復(fù)制代碼 代碼如下:

SpecialAccount = Account:new()

這里 SpecialAccount 擁有了(繼承了)Account 的 new 方法。那么我們就可以使用 SpecialAccount 構(gòu)建對(duì)象:
復(fù)制代碼 代碼如下:

local sa = SpecialAccount:new{limit = 1000}
sa:withdraw(100)

 

這里通過 SpecialAccount:new 構(gòu)造了對(duì)象 sa,并且 sa 的 metatable 為 SpecialAccount。執(zhí)行 sa:withdraw(100),Lua 在 sa 中找不到 withdraw,就會(huì)在 SpecialAccount 中找,在 SpecialAccount 中也找不到 withdraw,然后在 Account 中找到 withdraw 并調(diào)用它。Account 中的 withdraw 顯然不是我們想要的,我們?cè)?SpecialAccount 中重新定義它:

復(fù)制代碼 代碼如下:

function SpecialAccount:withdraw(v)
    if v - self.balance >= self:getLimit() then
        print('insufficient funds')
        return
    end
    self.balance = self.balance - v
end
 
function SpecialAccount:getLimit()
    return self.limit or 0
end

 

我們?cè)僬{(diào)用 sa:withdraw(100),Lua 先在 SpecialAccount 中找到 withdraw 并調(diào)用它。

延伸 · 閱讀

精彩推薦
  • LuaLua教程(二):基礎(chǔ)知識(shí)、類型與值介紹

    Lua教程(二):基礎(chǔ)知識(shí)、類型與值介紹

    這篇文章主要介紹了Lua教程(二):基礎(chǔ)知識(shí)、類型與值介紹,本文講解了Hello World程序、代碼規(guī)范、全局變量、類型與值等內(nèi)容,需要的朋友可以參考下 ...

    腳本之家5922020-04-28
  • LuaLua簡(jiǎn)介、編譯安裝教程及變量等語法介紹

    Lua簡(jiǎn)介、編譯安裝教程及變量等語法介紹

    這篇文章主要介紹了Lua簡(jiǎn)介、編譯安裝教程及變量等語法介紹,本文同時(shí)講解了lua注釋語法、Lua命令行方式等內(nèi)容,需要的朋友可以參考下 ...

    junjie3632020-04-14
  • Lua深入探究Lua中的解析表達(dá)式

    深入探究Lua中的解析表達(dá)式

    這篇文章主要介紹了深入探究Lua中的解析表達(dá)式,對(duì)于其語法部分的說明和示例都超詳細(xì),極力推薦此文!需要的朋友可以參考下 ...

    腳本之家3542020-05-05
  • LuaLua中table庫函數(shù)方法介紹

    Lua中table庫函數(shù)方法介紹

    這篇文章主要介紹了Lua中table庫函數(shù)方法介紹,本文講解了concat、insert、maxn、remove、sort、foreachi等方法,需要的朋友可以參考下 ...

    腳本之家2502020-04-17
  • LuaLua和C語言的交互詳解

    Lua和C語言的交互詳解

    這篇文章主要介紹了Lua和C語言的交互詳解,Lua和C語言通過棧完成交互,本文結(jié)合代碼實(shí)例詳細(xì)講解了交互的方法,需要的朋友可以參考下 ...

    果凍想3702020-04-14
  • LuaLua實(shí)現(xiàn)__add方法重載示例

    Lua實(shí)現(xiàn)__add方法重載示例

    這篇文章主要介紹了Lua實(shí)現(xiàn)__add方法重載示例,本文直接給出實(shí)現(xiàn)代碼,需要的朋友可以參考下 ...

    腳本之家7452020-04-24
  • LuaLua中的元方法__newindex詳解

    Lua中的元方法__newindex詳解

    這篇文章主要介紹了Lua中的元方法__newindex詳解,本文講解了查詢與更新、監(jiān)控賦值、通過table給另一個(gè)table賦值等內(nèi)容,需要的朋友可以參考下 ...

    笨木頭8872020-04-09
  • LuaLua中計(jì)算、執(zhí)行字符串中Lua代碼的方法

    Lua中計(jì)算、執(zhí)行字符串中Lua代碼的方法

    這篇文章主要介紹了Lua中計(jì)算、執(zhí)行字符串中Lua代碼的方法,類似JavaScript中eval函數(shù)的功能,在Lua中也可以實(shí)現(xiàn),需要的朋友可以參考下 ...

    腳本之家6322020-04-30
Weibo Article 1 Weibo Article 2 Weibo Article 3 Weibo Article 4 Weibo Article 5 Weibo Article 6 Weibo Article 7 Weibo Article 8 Weibo Article 9 Weibo Article 10 Weibo Article 11 Weibo Article 12 Weibo Article 13 Weibo Article 14 Weibo Article 15 Weibo Article 16 Weibo Article 17 Weibo Article 18 Weibo Article 19 Weibo Article 20 Weibo Article 21 Weibo Article 22 Weibo Article 23 Weibo Article 24 Weibo Article 25 Weibo Article 26 Weibo Article 27 Weibo Article 28 Weibo Article 29 Weibo Article 30 Weibo Article 31 Weibo Article 32 Weibo Article 33 Weibo Article 34 Weibo Article 35 Weibo Article 36 Weibo Article 37 Weibo Article 38 Weibo Article 39 Weibo Article 40
主站蜘蛛池模板: 精品国产一区二区三区四区 | 在线观看黄色 | 日韩欧美中文字幕在线视频 | 久久国产精品一区二区 | 久久中文字幕一区二区三区 | 91精品国产综合久久久久 | av大片网| 精品在线一区二区 | 午夜天堂精品久久久久 | 韩日中文字幕 | 午夜影院在线 | 蜜桃视频成人在线观看 | 91免费视频网站 | 日韩成人一区 | 亚洲欧美精品一区二区 | 国产色 | 成人三区 | 亚洲国产成人av | 黄色免费av | 日韩av片无码一区二区不卡电影 | 日韩亚洲一区二区 | 精品久久久久久久久久久久久久久久久久久 | 国产在亚洲 线视频播放 | 色婷婷精品国产一区二区三区 | 欧美日韩中文国产一区发布 | 天天操天天射天天 | 国产情侣91 | 精品一区二区三区免费视频 | 激情国产| 午夜精品影院 | 亚洲情综合五月天 | 寡妇性视频免费高清播放器 | 狠狠久| 成人综合免费视频 | av在线中文 | 在线国产视频 | 精品国产99| 亚洲国产免费 | 色狠狠久久av五月综合 | 亚洲精品字幕 | 青娱乐一区 |