Lua 中模擬 類

2021-06-22 12:45:35 字數 2516 閱讀 7303



lua類

類一般都有類名,屬性宣告,構造體,方法,屬性。下面用lua實現類的模擬,類的模擬有很多種,但是都必須用到__index

下面看看**吧

--宣告了類名還有屬性,並且給出了屬性的初始值。

class =

--這句是重定義元表的索引

class.__index = class

--構造體,構造體的名字是隨便起的,一般都叫名為 new()

function class:new(x,y)

--初始化self,如果沒有這句,那麼類所建立的物件改變,其他物件都會改變

local self = {}

--將self的元表設定為class

setmetatable(self, class)

--屬性值初始化

self.x = x

self.y = y

--返回自身

return self

end--這裡定義類的其他方法

function class:show()

print("x = " .. self.x .. " y = " .. self.y)

endfunction class:plus()

self.x = self.x + 10

self.y = self.y + 10

end-- 類的定義完畢,開始建立物件

--[[

local a = class:new(12,21)

a:show()

a:plus()

a:show()

local b = class:new(99,99)

b:show()

b:plus()

b:show()

--]]

--[[

2,繼承

lua之中沒有繼承的概念,但是可以模擬,

我們建立乙個新的類main,它是class類的子類,

包含其一切方法。

--]]

--宣告了新的屬性z

classto =

--設定型別是class

setmetatable(classto, class)

--還是和類定義一樣,表索引設定為自身

classto.__index = classto

--這裡是構造體,多加上了乙個新的引數

function classto:new(x,y,z)

--初始化物件自身

local self = {}

--將物件自身設定為父類,這個語句相當於其他語言的super

self = class:new(x,y)

--將物件自身元表設定為main類

setmetatable(self, classto)

--新的屬性初始化,如果沒有將會按照宣告=0

self.z = z

--返回自身

return self

end--定義乙個新的方法

function classto:go()

self.x = self.x + 100

end--重定義父類的方法

function classto:show()

print("x = " .. self.x .. " y = " .. self.y .. " z = " .. self.z)

end-- 然後建立物件

--[[

local c = classto:new(1,10,100)

c:show()

local d = classto:new(100, 10, 1)

d:go()

d:show()

d:plus()

d:show()

c:show()

--]]

--[[

3,多型

lua作為動態語言,支援多型是基本,但是物件?

馬上為您呈現

--]]

--在class中新定義的乙個函式getnum()

function class:getnum()

return 100

end--這裡會引用getnum()

function class:numtodoubled()

return self:getnum() * 2

end--在 classto 中重新定義了getnum()

function classto:getnum()

return 50

end-- 演示多型

local a = class:new(10, 20)

print(a:numtodoubled())

local b = classto:new(10, 50, 200)

print(b:numtodoubled())

print(a:numtodoubled())

--[[

呼叫lua類的屬性請使用點號,而呼叫其方法請使用冒號

--]]

Lua之模擬類與物件

lua中本身沒有 類與物件 的概念,但是可以使用lua語言將其模擬出來。1.table為引用型資料 需要明確的是,值型別變數判斷相同的條件是值 內容 相同,而引用型變數判斷相同的條件為位址相同。2.模擬過程 類的建立 a.類 初始化乙個table來模擬 b.欄位 將其定義在table的 中,可以賦予...

Lua中類的函式

對於lua中類的函式,這裡需要說明的是如下幾點 1.當你在寫類中的函式時,如果對函式新增了local 就會報如下錯誤 之所以會出現這樣的問題,在於根本就不能對類的方法單獨新增local。下面舉例說明 下面是乙個區域性函式。local function doa print 區域性函式 endtab 類...

lua中利用table表模擬switch

首先定義乙個表 switch 然後定義各個分支 switch 1 function end switch a function end 然後呼叫 switch var 記得後面的 不要忘記哦 o 我們這裡舉個簡單例子,把月份轉換成漢字形式 switch switch 1 function retur...