一.在類中,self的用法
lua程式設計中,經常遇到函式的定義和呼叫,有時候用點號呼叫,有時候用冒號呼叫,這裡簡單的說明一下原理。
girl =
function girl.gotomarket(girl ,somemoney)
girl.money = girl.money - somemoney
endgirl.gotomarket(girl ,100)
print(girl.money)
可以看出,這裡進行了方法的點號定義和點號呼叫。
boy =
function boy:gotomarket(somemoney)
self.money = self.money - somemoney
endboy:gotomarket(100)
print(boy.money)
這裡進行了冒號定義和冒號呼叫。
以上的列印結果都是100。
可以看出,冒號定義和冒號呼叫其實跟上面的效果一樣,只是把第乙個隱藏引數省略了,而該引數self指向呼叫者自身
當然了,我們也可以點號定義冒號呼叫,或者冒號定義點號呼叫
如:boy =
function boy.gotomarket(self ,somemoney)
self.money = self.money - somemoney
endboy:gotomarket(100)
print(boy.money)
總結:冒號只是起了省略第乙個引數self的作用,該self指向呼叫者本身,並沒有其他特殊的地方。
二.類實現中關於self和變數宣告也是乙個很容易出錯的地方
self:指向當前作用域的父表結構
首先看 classbase.lua
local stclassbase = {}
--這個變數是和stclassbase表同級別的 隸屬於classbase.lua檔案作用域
local _listlength = 1
function stclassbase:setdata()
print("++++++++++++++++++++++++++", _listlength)
--輸出1 函式setdata隸屬於stclassbase表 可以訪問到stclassbase表同級別變數 _listlength
_listlength = 10;
print("++++++++++++++++++++++++++", _listlength)
--輸出10
print("++++++++++++++++++++++++++", self._listlength)
--輸出 nil 函式setdata隸屬於stclassbase表 self指向的stclassbase沒有_listlength變數
endreturn stclassbase
下面我們修改 classbase.lua 做對比
--定義內部變數 _listlength
local stclassbase =
function stclassbase:setdata()
print("++++++++++++++++++++++++++", _listlength)
--輸出nil
print("++++++++++++++++++++++++++", self._listlength)
--輸出 1 因為函式setdata隸屬於stclassbase表 self指向stclassbase的_listlength變數
endreturn stclassbase
Lua 函式冒號 點 self 的用法
在理解到函式的用法,需要先理解幾個 lua中的 表 的功能。語法 myclass 使用冒號宣告函式 function myclass myfuna body end 使用點宣告函式 function myclass.myfunb body endreturn分析 定義函式 function mycl...
python中self的用法
self相當於是類對外提供的乙個呼叫屬性和動態方法的介面,在類的方法中加上self,則可以通過例項化後的物件呼叫,沒有的話就只能通過類本身呼叫 類名.函式名 分為兩種情況 class test01 def init self,t self.t t def testfun01 self print 這...
LUA中的冒號 點和self
在lua程式設計中,經常會看到有時用點號定義乙個table的成員函式,有時卻用冒號,在呼叫的時候也是如此。那麼點號和冒號在使用上有什麼區別呢?它們與self之間又是什麼樣的關係呢?稍安勿躁,接下來謎底將一一為你揭開。下面先看乙個例子 class class.index class function ...