"self"如何访问本地表的键?

我对 Lua 不太熟悉,我正在学习 这个视频。在视频的 38 分 56 秒处,有一段代码如下:

Sequence = {}
function Sequence:new()
  local new_seq = {last_num = 0}
  self.__index = self
  return setmetatable(new_seq, self)
  end

function Sequence:next()
  print(self.last_num)
  end

我的理解是,self 等同于 Sequence,而 self 被设置为 new_seq 的元表,这个元表的 __index 也是 self

last_num 是表 new_seq 的一个键,但不是 self 的一个键,那么在 next 函数的定义中,为什么可以写 self.last_num,就好像把 last_num 当作 self 的一个键一样?

此外,在调用 setmetatable 之前,代码有 self.__index = self,我认为只有元表有 __index 作为一个特殊键,但在调用 setmetatable 之前,Sequence 只是一个普通的表而不是元表,那么它怎么会有 __index

点赞