示例代码: function Account:new (o) o = o or {} -- create object if user does not provide one setmetatable(o, self) self.__index = self return oend 取自: http://www.lua.org/pil/16.1.html 目的是什么: self.__index = self 线?为
function Account:new (o) o = o or {} -- create object if user does not provide one setmetatable(o, self) self.__index = self return o end
取自:
http://www.lua.org/pil/16.1.html
目的是什么:
self.__index = self
线?为什么每次创建对象时都会执行它?
正如其他人所说,self(Account表)用作分配给使用new创建的对象的元表.当在’o’中找不到字段时,稍微简化(在提供的链接上提供更多信息),它会转到’帐户’表,因为o的metatable表示转到帐户(这是__index所做的).但是,每次创建对象时都不需要执行它.你可以很容易地把它粘在某个地方:
Account.__index = Account
它也会起作用.
更长的故事是,如果对象o具有metatable,并且metatable具有__index字段集,则o上的失败字段查找将使用__index来查找字段(__ index可以是表或函数).如果o已设置字段,则不要转到其metatable的__index函数来获取信息.不过,我再次鼓励您阅读上面提供的链接.