国产在线精品一区二区三区直播_精品国产乱码久久久久久影片_欧美老妇人与禽交_男人天堂2018手机在线版_亚洲中文精品久久久久久不卡_国产毛多水多做爰爽爽爽_野外做受三级视频_中文天堂在线www_国产精品无码久久四虎_国产在线观看免费人成视频

您的位置:首頁(yè) >關(guān)注 >

lua中 . 和 : 的區(qū)別

最近項(xiàng)目中使用到了 lua,因?yàn)橹皼](méi)怎么接觸過(guò),特此記錄下自己在學(xué)習(xí)過(guò)程中疑惑的地方。

在使用lua進(jìn)行編碼的過(guò)程中,我們經(jīng)常會(huì)使用到.:,但是對(duì)于剛開(kāi)始接觸lua的我來(lái)說(shuō),對(duì)這兩者的使用還是感到時(shí)常感到疑惑,接下來(lái)我們一起看看幾個(gè)例子,來(lái)感受兩者的區(qū)別。如果發(fā)現(xiàn)文中錯(cuò)誤的地方,請(qǐng)不吝賜教,謝謝!

1、基礎(chǔ)介紹

接下來(lái),我們看看下面的例子,來(lái)了解.:的基礎(chǔ)用法。


(資料圖片)

Car = {Name="BYD", Price=12}print("Car 的地址 --->", Car)print(Car.Name) -- 訪問(wèn)屬性-- print(Car:Name) 報(bào)錯(cuò)print(string.rep("*", 20))function Car:find1()print(": 定義的函數(shù)并且使用 : 調(diào)用時(shí) self 的地址--->", self)endfunction Car.find2()print(". 定義的函數(shù)并且使用 . 調(diào)用時(shí) self 的地址--->", self)endCar:find1()Car.find2()print(string.rep("*", 20))function Car:find3()print(": 定義的函數(shù)并且使用 . 調(diào)用時(shí) self 的地址--->", self)endfunction Car.find4()print(". 定義的函數(shù)并且使用 : 調(diào)用時(shí) self 的地址--->", self)endCar.find3()Car:find4()

運(yùn)行結(jié)果:

Car 的地址 ---> table: 038F9CA0BYD********************: 定義的函數(shù)并且使用 : 調(diào)用時(shí) self 的地址--->   table: 038F9CA0. 定義的函數(shù)并且使用 . 調(diào)用時(shí) self 的地址--->   nil********************: 定義的函數(shù)并且使用 . 調(diào)用時(shí) self 的地址--->   nil. 定義的函數(shù)并且使用 : 調(diào)用時(shí) self 的地址--->   nil

大家測(cè)試的時(shí)候,可以自己試一試。

從上面我們知道:

  • 使用點(diǎn)號(hào).來(lái)訪問(wèn) table 的屬性,不能使用:來(lái)訪問(wèn) table 的屬性。
  • 使用.:都可以用來(lái)訪問(wèn) table 的函數(shù)。
  • 使用:定義的函數(shù)并且使用:調(diào)用時(shí),定義的函數(shù)中默認(rèn)有一個(gè)變量self。而不是使用:定義的函數(shù)并且使用:調(diào)用時(shí),定義的函數(shù)中的是沒(méi)有self變量的。

2、稍微深入的了解

通過(guò)上面的介紹,我們對(duì) .:有一個(gè)簡(jiǎn)單的了解,接下我們?cè)偕晕⑸钊氲牧私庀隆_@里先說(shuō)結(jié)論,然后再看例子。

.:的區(qū)別在于使用 :

  • 使用:定義的函數(shù)時(shí),函數(shù)隱含 self參數(shù),使用 :調(diào)用函數(shù)會(huì)自動(dòng)傳入 tableself參數(shù)。而使用.定義的函數(shù)并沒(méi)有這樣。
  • Lua 中使用:可以實(shí)現(xiàn)面向?qū)ο蠓绞降恼{(diào)用。:只是語(yǔ)法糖,它同時(shí)在方法的聲明與實(shí)現(xiàn)中增加了一個(gè)名為 self的隱藏參數(shù),這個(gè)參數(shù)就是對(duì)象本身。

2.1 :定義的函數(shù)的示例

classA={}print("ClassA 地址 -->", classA)function classA:getob(name)    print("classA:getob 中self 的地址 -->", self)    ob={}    setmetatable(ob,self)    self.__index=self    self.name=name    return obendfunction classA:getself()    return selfendc1=classA:getob("A")print("c1 地址 -->", c1)c2=classA:getob("B")print("c2 地址 -->", c2)print(string.rep("*",30))print(c1:getself())print(c2:getself())print(string.rep("*",30))----------------------繼承------------------------classB=classA:getob()    ----非常重要,用于獲取繼承的selffunction classB:getob(name,address)    ob=classA:getob(name)    setmetatable(ob,self)    self.__index=self    self.address=address    return obendc3=classB:getob("gray.yang","shenzhen")print("c3 地址 -->", c3)print(c3:getself())

運(yùn)行結(jié)果:

ClassA 地址 --> table: 0392D128classA:getob 中self 的地址 -->  table: 0392D128c1 地址 -->     table: 0392D010classA:getob 中self 的地址 -->  table: 0392D128c2 地址 -->     table: 0392CE80******************************table: 0392D010table: 0392CE80******************************classA:getob 中self 的地址 -->  table: 0392D128classA:getob 中self 的地址 -->  table: 0392D128c3 地址 -->     table: 03933050table: 03933050

2.2 .定義的函數(shù)的示例

classA={}print(classA)function classA.new(cls,...)     --定義類方法時(shí)使用"."號(hào),不適用隱式傳參print(cls)    this={}    setmetatable(this,cls)    cls.__index=cls           --將元表的__index設(shè)為自身,訪問(wèn)表的屬性不存在時(shí)會(huì)搜索元表    cls.init(this,...)        --初始化表,注意訪問(wèn)類的方法都是".",此時(shí)不會(huì)隱式傳入?yún)?shù)    return thisendfunction classA.init(self,name)print("classA.init -->", self)    self.name=nameendfunction classA.getname(self)print("classA.getname -->", self)    return self.nameend-- 注意這里的調(diào)用方式,是 : 。p=classA:new("gray.yang")print("p --->", p)print(p:getname())print(string.rep("*",50))

運(yùn)行結(jié)果:

table: 0381B888table: 0381B888classA.init --> table: 0381B8D8p --->  table: 0381B8D8classA.getname -->      table: 0381B8D8gray.yang**************************************************

熟悉其他面向語(yǔ)言的同學(xué),看了上面的例子,應(yīng)該對(duì).:有了了解,接下來(lái)自己平常多寫(xiě)寫(xiě)就明白了。

參考資料

Lua 面向?qū)ο?/p>

標(biāo)簽:

精彩新聞