当前位置 : 主页 > 网络编程 > lua >

在lua中编程,对象

来源:互联网 收集:自由互联 发布时间:2021-06-23
示例代码: 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函数来获取信息.不过,我再次鼓励您阅读上面提供的链接.

网友评论