關於lua中的冒號(":")和點號(".")的區別


一、定義方法的區別

1、冒號定義方法,默認會接受self參數;而點號定義的時候,默認不會接受self參數

例:

(1)冒號定義

function class:test()

  --這里會接受self參數,比如

  print(self.a,self.b)

  在這里self就是class對象本身,因此不會出錯

end

(2)點號定義

function class.test()

  --點號定義時,默認不會接受self參數,因此在這里用self會出錯,找不到全局變量self,當然如果你把self定義成了一個全局變量的話。。。那么你贏了。。

  print(self.a,self.b)--報錯,找不到全局變量self

end

二、調用方法的區別

1、冒號調用方法,會默認地將對象本身(self)傳遞給方法;而點號調用則不會

例1:冒號定義

function class:test()  

  print(self.a,self.b)

end

(1)冒號調用:class:test(),這時候在test方法是可以使用self的,因為默認會將self傳遞給test方法

(2)點號調用:class.test(),這時候在test方法中使用self就會報錯了,因為self並沒有被傳遞給test方法,那么要怎么在test方法中使用self呢?其實也簡單,把class對象傳遞過去就好了,如:class.test(class)

例2:點號定義

function class.test()

  print(self.a,self.b)

end

(1)冒號調用:class:test(),這時會報錯,這里雖然冒號調用會把self傳遞過去,但是點號定義方法不接受self啊,所以會報錯。想要用就只能顯式地接受參數了,方法重新定義一下:function class.test(self) print(self.a) end

這樣,冒號調用的時候默認把對象本身傳遞給方法了,方法也接受了這個參數,這就對了,參數self的名字可以改變,function class.test(tt) print(tt.a,tt.b) end

(2)點號調用:class.test(),定義的時候沒有接受參數,調用的時候又沒有傳遞參數。。能成功才怪!

直接說正確方法吧:就是傳什么參數就用什么參數唄。。反正沒有默認參數

定義的時候,顯式地接受參數

function class.test(tt)

  print(tt.a,tt.b) 

end

class.test(class)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM