Lua之 與 詳解(以乙個簡單的類實現呼叫解析)

2021-09-25 13:16:52 字數 1958 閱讀 8583

local function classt(classname,...)

local cls = {}

cls.__classname = classname

cls.ctor = function (...)

--預設建構函式

endcls.new = function (...)--------------------(4)

local instance = {}

setmetatable(instance,)

instance.__class = cls

instance:ctor(...)-----------------------(5)

return instance

endcls.create = function (...)------------------(2)

return cls.new(...)----------------------(3)

endreturn cls

endlocal classat = classt("classa")

function classat:ctor(...)-----------------------(6)

self.name = ... -----------------------(7)

endlocal classa_1t = classat:create("secondparam")--(1)

詳解如下:

–(1):呼叫時預設傳入第乙個引數self即classat,第二個"secondparam"

–(2):但是函式宣告的時候用的 . ,所以不會有預設隱藏的self去接收,此時傳入引數為 classat secondparam

–(3).呼叫,不會傳入self,即引數為classat secondparam

–(4).但是函式宣告的時候用的 . ,所以不會有預設隱藏的self去接收,此時傳入引數為 classat secondparam

–(5):呼叫,會傳入self即instance,所以傳入引數instance classat secondparam

–(6):宣告,會有預設self接收instance,即傳入引數為classat secondparam

–(7)self.name = classat secondparam,多個引數賦值乙個變數,只賦值第乙個,

即self=instance,self.name=instance.name=classat

若將第(5)步變成instance.ctor(…),則

–(5):呼叫,不會傳入self即instance,所以傳入引數classat secondparam

–(6):宣告,會有預設self接收classat,即傳入引數為secondparam

總結如下:

classat:create(「secondparam」)這種:號呼叫,會預設傳入self作為第乙個引數,傳入引數為classat"secondparam"

cls.create = function (…)這種.號函式宣告,沒有預設self接收,將使得傳入引數變成classat 「secondparam」

instance:ctor(…)這種:號呼叫,會預設傳入self作為第乙個引數,傳入引數為instance classat 「secondparam」

function classat:ctor(…)這種有預設self接收,將使得傳入引數變為classat"secondparam"

lua 乙個簡單的繼承 派生關係

a function a fun print self.name endb c setmetatable b,指定繼承關係 setmetatable c,指定繼承關係 b fun 輸出this is b c fun 輸出this is c 由於指定了繼承關係,當c,b呼叫fun在物件本身找不到這個函...

乙個簡單的lua除錯工具

最近看起了lua的debug庫,想著可以簡單弄個跟gdb這樣的命令列除錯工具,於是花了幾天時間,搞了個相當簡單的除錯工具,實現了簡單的列印和斷點和下一步的功能 修改變數值的實現方式其實跟列印的操作並沒有很大區別,所以就懶得弄啦 雖然 很粗糙,使用和體驗上也相當奇葩,也勉強把,畢竟也達到了學學習,動動...

乙個簡單的hello world交叉編譯實驗

交叉編譯,簡單地說,就是在乙個平台上生成另乙個平台上的可執行 下面就做乙個簡單的hello world實驗來完成這一過程。本實驗涉及兩台主機。a主機 安裝交叉編譯環境,並用來編譯原始檔。在本次實驗中使用的是虛擬機器ubuntu系統環境 b主機 arm架構平台開發板,用來執行a主機編譯好的可執行檔案,...