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中模擬面向物件程式設計中,可以用 . 來表示類方法,而 : 可以用來表示成員方法。