lua 定義類 就是這麼簡單

2022-05-07 10:51:08 字數 1636 閱讀 7459

在網上看到這樣一段**,真是誤人子弟呀,具體就是:

lua類的定義

**如下:

local clsnames ={}

local __setmetatable =setmetatable

local __getmetatable =getmetatable

function class(classname, basecls)

if classname ==nil then

bxlog.e(

"classname can't be nil")

return

nil end

ifclsnames[classname] then

bxlog.e(

"has create the same name,

"..classname)

return

nil end

clsnames[classname] = true

local cls =nil

ifbasecls then

cls =basecls:create()

else

cls ={}

endcls.m_cn =classname

cls.getclassname =function(self)

local mcls =__getmetatable(self)

return

mcls.m_cn

endcls.create =function(self, ...)

local newcls ={}

__setmetatable(newcls, self)

self.__index =self

newcls:__init(...)

return

newcls

endreturn

clsend

這個**的邏輯:

1.建立乙個類,其實是建立了乙個父類的物件。

然後指定自己的create.

2.建立乙個類的物件,其實就是建立乙個表,這個表的元表設定為自己。然後呼叫初始化。

上面是錯誤的思路。

----------------------------------------

我的理解:

1.建立類:建立乙個表, 且__index指向父類。

2.建立物件:建立乙個表,元表設定為類。

### 就是這麼簡單,只要看下面的cls 和inst 兩個表就可以了。

我來重構,如下為核心**:

function class(classname, basecls)

local cls ={}

ifbasecls then

cls.__index =basecls

endfunction call(self, ... )

local inst ={}

inst.__index = self--靜態成員等。

setmetatable(inst, self)

inst:__init(...)

return

inst

endcls.__call =call

return

clsend

Jsonp原理就是這麼簡單

原理 包裹資料的js資料檔案,自動執行,找到目標函式,通過傳參,把資料注入進去。當你開啟本篇博文,證明你已經大體知道了jsonp的作用了。但如果你需要我介紹一下,我也可以簡單介紹 簡單說,就是解決 跨域 請求資料的作用。跨域 不同網域名稱 不同ip 不同埠的資料訪問,都屬於跨域。js本身對跨域資料請...

理解ERP就是這麼簡單

家 中 請 客 訂貨意向 妻子 當然可以,來幾個人,幾點來,想吃什麼菜?丈夫 6個人,我們7點左右回來,準備些酒 烤鴨 番茄炒蛋 冷盤 蛋花湯。你 看可以嗎?商務溝通 妻子 沒問題,我會準備好的,訂單確認 妻子記錄下需要做的選單 mps計畫 具體要準備的菜 鴨 酒 番茄 雞蛋 作 油。bom物料清單...

TCP IP協議 就是這麼簡單

核心協議在使用者網路作業系統安裝的tcp ip協議模組是一系列相互聯絡的協議,所有其他應用程式和tcp ip協議套件中的其他協議都依賴於tcp ip核心協議所提供的基本協議。這些協議包括 ip arp icmp igmp tcp和udp。應用層協議因為僅僅在具體的網路環境中,僅僅是核心協議是不夠的 ...