1. 程式人生 > >lua中點號和冒號在定義方法和呼叫方法的區別

lua中點號和冒號在定義方法和呼叫方法的區別


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