lua中點號和冒號在定義方法和呼叫方法的區別
阿新 • • 發佈:2018-11-07
local a = {x=2} --[[function a.foo1(b) self.x = b end a.foo1(5) print(a.x) --報錯:attempt to index global 'self' (a nil value)]] --[[function a.foo2(self,b) --用點號定義方法 self.x = b end a.foo2(a,5) --用點號呼叫方法 print(a.x) --輸出 5]] --[[function a.foo3(self,b) --用點號定義方法 self.x=b end a:foo3(6) --用冒號呼叫方法 print(a.x) --輸出6]] --[[function a:foo4(b) --用冒號定義方法 self.x=b end a.foo4(a,7) --用點號呼叫 print(a.x) --輸出 7]] --[[function a:foo5(b) -- 用冒號定義方法 self.x=b end a:foo5(8) --用冒號呼叫方法 print(a.x) -- 輸出 8]] function a:foo6(self,b) --用冒號定義方法也傳入了self引數 self.x =b end a:foo6(8) --報錯 a:foo6(a,8) --不報錯 print(a.x) --冒號的作用就是:定義函式時,給函式的新增隱藏的第一個引數self(這樣函式體內有self才不會報錯); --呼叫函式時,預設把當前呼叫者作為第一個引數傳遞進去 ....... --使用了冒號之後,就相當於我們剛剛使用點號時一樣, --只是我們不再需要顯式地定義self引數以及在呼叫時主動地傳遞引數(呼叫者)
t={x=1}
function t.foo(a)
print(a.x)
end
local a = {x=2}
print(t.foo(a)) --輸出2
--print(t:foo()) --輸出1
--print(t:foo(a)) --輸出1