在lua中,表擁有一個標識:self。self類似於this指針,大多數面嚮對象語言都隱藏了這個機制,在編碼時不需要顯示的聲明這個參數,就可以在方法內使用this(例如C++和C#)。
在lua中,提供了冒號操作符來隱藏這個參數
冒號的作用有兩個:
1、對於方法定義來說,會增加一個額外的隱藏形參(self);
2、對於方法調用來說,會增加一個額外的實參(表自身)
local t = {a = 2 , b = 1}
--使用:自定義函數
function t:add()
return self.a + self.b
end
--使用.自定義函數
function t.sub(parT)
return parT.a - parT.b
end
--通過:調用,會隱式將self傳入進去
print(t:add())
--通過.來調用,則必須傳入參數,否則報nil錯誤
print(t.add(t))
--通過.來調用,則必須傳入參數,否則報nil錯誤
print(t.sub(t))
--通過:來調用,則會隱藏將self傳入
print(t:sub())
運行結果:
[root@iZbp13pwlxqwiu1xxb6szsZ test]# lua TestSelf.lua
3
3
1
1