最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

淺談Lua的面向?qū)ο筇匦?/h1>
 更新時(shí)間:2015年05月29日 11:37:27   投稿:goldensun  
這篇文章主要介紹了Lua的面向?qū)ο筇匦?包括對(duì)象和繼承等傳統(tǒng)OOP概念的幾個(gè)關(guān)鍵知識(shí)點(diǎn),需要的朋友可以參考下

 面向?qū)ο蟮奶匦?/p>

  •     類: 類是可擴(kuò)展的模板用來創(chuàng)建對(duì)象,提供狀態(tài)的初始值(成員變量)和行為的實(shí)現(xiàn)。
  •     對(duì)象: 它是類的實(shí)例并具有分配給自己獨(dú)立的內(nèi)存。
  •     繼承: 它是由變量和類的函數(shù)被其他類繼承的概念。
  •     封裝: 它是將數(shù)據(jù)和函數(shù)相結(jié)合的一類內(nèi)的方法。數(shù)據(jù)可以在類的外部與函數(shù)的幫助下進(jìn)行訪問。它也被稱為數(shù)據(jù)抽象。

Lua的OOP

在Lua中實(shí)現(xiàn)面向?qū)ο笈c表和Lua的第一類函數(shù)。通過將函數(shù)和相關(guān)數(shù)據(jù)插入表中形成一個(gè)對(duì)象。繼承可以在metatables的幫助下來實(shí)現(xiàn),提供了一個(gè)查找機(jī)制不存在的函數(shù)(方法)和在父對(duì)象字段。

在Lua表有這樣的狀態(tài)和標(biāo)識(shí)對(duì)象,它是獨(dú)立于值的特性。兩個(gè)對(duì)象(表),具有相同的值但在不同的對(duì)象,而一個(gè)對(duì)象可以具有在不同的值,但它始終是相同的對(duì)象。就像對(duì)象表中有一個(gè)生命周期,獨(dú)立創(chuàng)建或被創(chuàng)建。
一個(gè)真實(shí)世界的例子

面向?qū)ο蟮母拍钍菑V泛的,但要明白和獲取最大利益。

讓我們考慮一個(gè)簡(jiǎn)單的數(shù)學(xué)例子。我們經(jīng)常會(huì)遇到,我們工作在不同的形狀像圓形,長(zhǎng)方形和正方形的情況。

形狀可以有一個(gè)共同的屬性區(qū)。因此,我們可以從與共同屬性區(qū)域的基礎(chǔ)對(duì)象形狀擴(kuò)展的其它形狀。每個(gè)形狀都可以有其自己的性質(zhì)和功能類似的矩形可以有屬性的長(zhǎng)度,寬度,面積作為其屬性,printArea中和calculateArea作為它的函數(shù)。
創(chuàng)建一個(gè)簡(jiǎn)單的類

一個(gè)簡(jiǎn)單的類實(shí)現(xiàn)矩形三個(gè)屬性面積,長(zhǎng)度和寬度如下所示。它也有一個(gè)printArea中功能打印所計(jì)算的面積。

復(fù)制代碼 代碼如下:
-- Meta class
Rectangle = {area = 0, length = 0, breadth = 0}

-- Derived class method new
function Rectangle:new (o,length,breadth)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  self.length = length or 0
  self.breadth = breadth or 0
  self.area = length*breadth;
  return o
end

-- Derived class method printArea
function Rectangle:printArea ()
  print("The area of Rectangle is ",self.area)
end

創(chuàng)建對(duì)象

創(chuàng)建對(duì)象是類的實(shí)例分配存儲(chǔ)器的過程。每個(gè)對(duì)象具有它自己的存儲(chǔ)器和共享公用類數(shù)據(jù)。

復(fù)制代碼 代碼如下:
r = Rectangle:new(nil,10,20)

訪問屬性

在類中用點(diǎn) . 操作符,如下圖所示,可以訪問屬性

復(fù)制代碼 代碼如下:
print(r.length)

訪問成員函數(shù)

使用冒號(hào)運(yùn)算符,如下圖所示,可以訪問對(duì)象成員函數(shù)。

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

存儲(chǔ)器被分配和初始值被設(shè)定。初始化過程可以比在其它面向?qū)ο蟮恼Z(yǔ)言構(gòu)造。它只是一項(xiàng)功能設(shè)定值,如上圖所示。
完整例子

讓我們來看看使用面向?qū)ο蟮腖ua中一個(gè)完整的例子。

復(fù)制代碼 代碼如下:
-- Meta class
Shape = {area = 0}

-- Base class method new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end

-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

-- Creating an object
myshape = Shape:new(nil,10)

myshape:printArea()

當(dāng)運(yùn)行上面的程序,會(huì)得到如下的輸出。

復(fù)制代碼 代碼如下:
The area is  100

Lua的繼承

繼承是擴(kuò)展形狀簡(jiǎn)單的基本對(duì)象,以矩形,正方形等的處理。它通常用于在真實(shí)世界中的共享和擴(kuò)展的基本性質(zhì)和功能。

讓我們看一個(gè)簡(jiǎn)單的類擴(kuò)展。有一個(gè)類,如下圖所示。

 

復(fù)制代碼 代碼如下:
-- Meta class
Shape = {area = 0}
-- Base class method new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end
-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

我們可以擴(kuò)展的形狀為正方形類如下所示。

復(fù)制代碼 代碼如下:
Square = Shape:new()
-- Derived class method new
function Square:new (o,side)
  o = o or Shape:new(o,side)
  setmetatable(o, self)
  self.__index = self
  return o
end

重載基礎(chǔ)函數(shù)

我們可以重載基類函數(shù)使用基類中的函數(shù),而不是派生類它自己再實(shí)現(xiàn),如下圖所示

復(fù)制代碼 代碼如下:
-- Derived class method printArea
function Square:printArea ()
  print("The area of square is ",self.area)
end

繼承完整的例子

Lua中我們可以擴(kuò)展的簡(jiǎn)單類實(shí)現(xiàn),如上圖所示metatables另一個(gè)新的方法。所有的成員變量和基類的函數(shù)被保留在派生類。

復(fù)制代碼 代碼如下:
 -- Meta class
Shape = {area = 0}
-- Base class method new
function Shape:new (o,side)
  o = o or {}
  setmetatable(o, self)
  self.__index = self
  side = side or 0
  self.area = side*side;
  return o
end
-- Base class method printArea
function Shape:printArea ()
  print("The area is ",self.area)
end

-- Creating an object
myshape = Shape:new(nil,10)
myshape:printArea()

Square = Shape:new()
-- Derived class method new
function Square:new (o,side)
  o = o or Shape:new(o,side)
  setmetatable(o, self)
  self.__index = self
  return o
end

-- Derived class method printArea
function Square:printArea ()
  print("The area of square is ",self.area)
end

-- Creating an object
mysquare = Square:new(nil,10)
mysquare:printArea()

Rectangle = Shape:new()
-- Derived class method new
function Rectangle:new (o,length,breadth)
  o = o or Shape:new(o)
  setmetatable(o, self)
  self.__index = self
  self.area = length * breadth
  return o
end

-- Derived class method printArea
function Rectangle:printArea ()
  print("The area of Rectangle is ",self.area)
end

-- Creating an object
myrectangle = Rectangle:new(nil,10,20)
myrectangle:printArea()

當(dāng)我們運(yùn)行上面的程序,會(huì)得到下面的輸出。

復(fù)制代碼 代碼如下:
The area is  100
The area of square is  100
The area of Rectangle is  200

在上面的例子中,我們創(chuàng)建了兩個(gè)派生類Rectangle和Square從基類Square。因此能夠在此改變基類的功能的派生類。在本實(shí)現(xiàn)例子中,派生類會(huì)取代函數(shù)printArea。

相關(guān)文章

  • 用sysbench來測(cè)試MySQL的性能的教程

    用sysbench來測(cè)試MySQL的性能的教程

    這篇文章主要介紹了用sysbench來測(cè)試MySQL的性能的教程,使用Lua腳本操作,需要的朋友可以參考下
    2015-04-04
  • Lua中的文件I/O操作教程

    Lua中的文件I/O操作教程

    這篇文章主要介紹了Lua中的文件I/O操作教程,是Lua入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下
    2015-05-05
  • Lua字符串模式匹配函數(shù)小結(jié)

    Lua字符串模式匹配函數(shù)小結(jié)

    這篇文章主要介紹了Lua字符串模式匹配函數(shù)小結(jié),本文涉及一些正則操作,需要的朋友可以參考下
    2014-11-11
  • Lua中的loadfile、dofile、require詳解

    Lua中的loadfile、dofile、require詳解

    這篇文章主要介紹了Lua中的loadfile、dofile、require詳解,本文分別用實(shí)例講解它的用法和特點(diǎn)等內(nèi)容,需要的朋友可以參考下
    2014-09-09
  • Lua教程(二):基礎(chǔ)知識(shí)、類型與值介紹

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

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

    Lua變量類型簡(jiǎn)明總結(jié)

    這篇文章主要介紹了Lua變量類型簡(jiǎn)明總結(jié),本文總結(jié)了Lua中的6種變量類型,并一一說明,需要的朋友可以參考下
    2014-10-10
  • Lua讀寫文件代碼示例

    Lua讀寫文件代碼示例

    這篇文章主要介紹了Lua讀寫文件代碼示例,本文講解了讀寫文件的模式以及讀寫文件代碼實(shí)例,需要的朋友可以參考下
    2015-04-04
  • Lua Table轉(zhuǎn)C# Dictionary的方法示例

    Lua Table轉(zhuǎn)C# Dictionary的方法示例

    這篇文章主要給大家介紹了關(guān)于Lua Table轉(zhuǎn)C# Dictionary的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2018-03-03
  • Lua的函數(shù)環(huán)境、包實(shí)例講解

    Lua的函數(shù)環(huán)境、包實(shí)例講解

    這篇文章主要介紹了Lua的函數(shù)環(huán)境、包實(shí)例講解,本文分別對(duì)函數(shù)環(huán)境、包的定義、實(shí)現(xiàn)方式、使用方式做了分解,需要的朋友可以參考下
    2014-09-09
  • Lua教程(十一):模塊與包詳解

    Lua教程(十一):模塊與包詳解

    這篇文章主要介紹了Lua教程(十一):模塊與包詳解,本文講解了require函數(shù)、 編寫模塊的基本方法、使用環(huán)境、module函數(shù)等內(nèi)容,需要的朋友可以參考下
    2015-04-04

最新評(píng)論

宝鸡市| 永宁县| 庄河市| 沙河市| 栾川县| 四川省| 曲阳县| 开原市| 五河县| 合川市| 全州县| 车险| 新晃| 定南县| 山东省| 松桃| 日喀则市| 丹东市| 肥乡县| 新宾| 敦化市| 龙口市| 大连市| 米泉市| 盐边县| 南京市| 峨山| 蓝田县| 商水县| 七台河市| 宁武县| 米林县| 潜山县| 辽宁省| 即墨市| 宜兰市| 神木县| 田阳县| 博野县| 顺昌县| 札达县|