我學習和Lua的面向對象編程。我無法理解在實例的__index字段中分配表格併爲實例設置metatable之間的功能差異。我回顧了官方Lua的參考手冊,但我沒有完全掌握它們的區別。例如,要創建Account類的實例,它將Account類(self)的__index字段設置爲自身,然後將實例的metatable設置爲Account類。和元表
function Account:new (o)
o = o or {}
self.__index = self
setmetatable(o, self)
return o
end
這是怎麼回事?在這種情況下,爲什麼Account設置自己的索引?如果實例「o」僅使用Account類作爲其metatable,那麼在這種情況下真正使用metatables有什麼用處?爲什麼Lua允許類爲其實例的metatables?
從我的理解,元表應該是隻包括元方法(__newindex,__index,__add等)表。但這個例子有__index爲Account類的領域,它通過這一點,是不是元表並沒有一個元表分配給它使得分配查找另一元表,如果是有道理的。
在此先感謝。
謝謝您的快速回答。關於分配「帳戶.__索引=帳戶」,我是否正確地說這隻在我期望用戶創建帳戶實例時才需要,否則,分配不需要? – bladematthewslp
是的。我不知道有任何其他理由要這樣做。 – luther
好的,謝謝!這有助於很多。我現在終於明白了。我來自C++/Java/C#背景,所以Lua的面向對象設計版本需要對思維方式進行一些調整。 – bladematthewslp