前言
在LUA中,經常可以看到:. self,如果你學習過Java或C#語言,可以這樣理解
.對於c#和java的靜態方法
:相當於是實例方法
今天在CSDN上看到一篇博客寫的很清楚,轉載過來
原文出處:http://blog.csdn.net/wangbin_jxust/article/details/12170233
lua編程中,經常遇到函數的定義和調用,有時候用點號調用,有時候用冒號調用,這里簡單的說明一下原理。
點號(.)定義和調用
girl={money=200}
function girl.goToMarket(girl,someMoney)
girl.money= girl.money -someMoney
end
girl.goToMarket(girl,100)
print(girl.money)
可以看出,這里進行了方法的點號定義和點號調用。
冒號(:)定義和冒號調用
boy={money=200}
function boy:goToMarket(someMoney)
self.money = self.money -someMoney
end
boy:goToMarket(100) -- 注意這里的boy:goToMarket(100) -> boy.goToMarket(self,100)
print(boy.money)
這里進行了冒號定義和冒號調用。
運行結果
以上的打印結果都是100。
可以看出,冒號定義和冒號調用其實跟上面的效果一樣。把第一個隱藏參數省略了,而該參數self指向調用者自身
相互調用
當然了,我們也可以點號定義冒號調用,或者冒號定義點號調用如:
man={money=200}
function man.goToMarket(self,someMoney)
self.money = self.money -someMoney
end
man:goToMarket(100) -- 注意這里man:goToMarket(100) ->man.goToMarket(self,100)
print(man.money)
相互調用運行結果
總結
冒號只是起了省略第一個參數self的作用,該self指向調用者本身,並沒有其他特殊的地方。