已分配的值突然消失了,有什么解释吗?

function iterator(N)
  local i = i or 0 --从0开始,这样以后我们可以将它相加

  if type(N) == "table" then --检查N是不是一个表,如果不是则出错
    print("正在迭代表中的所有值")
  else
    error("这不是一个数组")
  end

  return function()

      setmetatable(N, {__newindex = --打印所有已分配到N中的值
        function(t, k, v)
          t[i] = v --尝试将v分配到N[i]中
          print(N[i]) --仍然是10
          print(k, v)--打印已分配到N中的键(或索引)
      end })

        i = i + 1 --将i加1

      return i , N[i] --返回索引(或键)和N的值
  end
end

t = { 1, true}

AI = iterator(t)
t[0] = 10 --如果我把它放在这里,元方法就不起作用了
while true do
  Ind, N = AI()
  print(N, Ind)

  if t[0] == nil then --元方法运行后,t[0]将不再为nil(预期的)
    t[0] = 10 --将打印0 10两次(我预期的是1)
    print(t[0]) --将打印nil
  end

  if Ind >= #t then
    break --停止迭代
  end

end

1.我已经将v分配到N[i]中并打印了它,但为什么当我打印t [0]时,我得到了nil

2.如果我没有在while循环中放置t [0] = 10,为什么__newindex元方法不起作用?(如果我将它放在循环外面,循环内部的元方法也将停止工作)

点赞