1. 程式人生 > 其它 >LUA中 . 與 :區別

LUA中 . 與 :區別

lua 中 . 和 : 的區別

首先在lua中使用“:”定義的函式會自動傳入一個名為self的變數,這個變數是隱含的,self同c++中的this一樣,表示當前物件的指標:而“.”定義的函式中沒有self。

function class:func2( ) end
function class.func1(self) end
--這時候這兩個函式等價

 

1種> 分析:預設傳self,預設接受self。

function MainScene:ctor()
  self:ceshi(1,2,3)
end
function MainScene:ceshi(a,b,c)
  print(a,b,c)
end
輸出:1 2 3

 

2種> 分析:呼叫ceshi函式時用的:預設傳遞self為第一個引數,但是函式宣告的時候用的 . 所以不會有預設隱藏的self去接收,此時傳遞引數為 self 1 2 3 但是ceshi函式只接收3個引數所以3被拋棄。

function MainScene:ctor()
  self:ceshi(1,2,3)
end
function MainScene.ceshi(a,b,c) --注意是.
  print(a,b,c)
end
輸出:userdata 1 2

 

3種> 分析:預設不傳遞self,預設不接受self

function MainScene:ctor()
  self.ceshi(1,2,3) --注意是.
end
function MainScene.ceshi(a,b,c) --注意是.
  print(a,b,c)
end
輸出:1 2 3

 

4種> 分析:函式呼叫時用的 . 不會傳遞self 只傳遞1 2 3,而ceshi函式宣告時用的 : 預設有一個self在第一位去接收,ceshi函式能接收4個引數,即 self a b c ,所以c沒有接收引數為nil。

function MainScene:ctor()
  self.ceshi(1,2,3) --注意是.
end
function MainScene:ceshi(a,b,c)
  print(self)
  print(a,b,c)
end
輸出:1
   2 3 nil

 

得出結論:在lua中模擬面向物件程式設計中,可以用 . 來表示類方法,而 : 可以用來表示成員方法。