Lua有人能解释一下这是怎么回事吗?

Lua有人能解释一下这是怎么回事吗?,lua,Lua,我正在学习lua,有人能解释一下这段代码是如何工作的吗 table = {1, 2, 3, 4, 5} function num(table, start) table = start return function() i = i + 1 if table[i - 1] then return i - 1,[table - 1] else return nil end end for k,v in ipairs(table) d

我正在学习lua,有人能解释一下这段代码是如何工作的吗

table = {1, 2, 3, 4, 5}

function num(table, start)
  table = start

  return function()
    i = i + 1
    if table[i - 1] then
      return i - 1,[table - 1]
    else
      return nil
  end
end

for k,v in ipairs(table) do
  print(k,v)
end

看起来这段代码将生成一个自定义迭代器函数。但它还没有完成,这是我对它应该是什么样子的最好猜测

tab = {1, 2, 3, 4, 5}

function num(tab, start)
  local i = start or 1
  return function()
    i = i + 1
    if tab[i - 1] then
      return i - 1,tab[i - 1]
    else
      return nil
    end
  end
end

for k,v in ipairs(tab) do
  print(k,v)
end

for k,v in num(tab) do
  print(k,v)
end
这段代码要做的是首先循环遍历tab并打印键值对。接下来,它使用它制作的迭代器,该迭代器在它之前打印键值对


迭代器继续返回,直到返回nil。然后for循环结束。

返回i-1,[table-1]
是语法错误。你在哪里看到这个脚本的?它还缺少
else
语句的
end
。代码看起来很糟糕
num
在其中的任何地方都没有使用;
参数会立即分配给它,使其毫无意义
i
是一个全局变量,没有在任何地方定义,因此
i=i+1
将失败;正如hjpotter和lukas所指出的,它的格式不正确。此代码将为您提供
1,1
2,2
3,3
4,4
5,5
num
函数永远不会被调用。如果它会-它会产生错误:没有足够的
end
语句。或者更早的版本-
[t-1]
不是Lua的产品。嗯,它只是一个神秘的chunk=)看起来num将成为一个迭代器。我猜这不是全部的代码