lua中self,「 」, 的用法

2021-09-29 15:45:38 字數 1786 閱讀 8522

一.在類中,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 ...