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主機編譯好的可執行檔案,...