Lua表初始化 - 这里有什么不对

时间:2014-06-18 19:58:15

标签: lua initialization lua-table

我正在尝试初始化并打印表格。它只是不工作。知道这个代码有什么问题吗?

--!/usr/bin/env lua


local retv = {}
retv["test"] = 1000

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

它什么都不打印。我确信我遗漏了一些非常基本的东西,但我无法弄清楚这一点。

2 个答案:

答案 0 :(得分:5)

Lua中有两种形式的for - 循环:
数字和通用for循环。

ipairs(t)是一个迭代器构造函数,最多返回三个适用于泛型的参数,允许您按顺序迭代初始序列(索引1,2,3,...)。
可能的实施:

function ipairs(t)
  local i = 0
  return function()
    i = i + 1
    if t[i] ~= nil then
      return i, t[i]
    end
  end
end
local function ipairs_helper(t, i)
  i = i + 1
  if t[i] ~= nil then
    return i, t[i]
  end
end
function ipairs(t)
  return ipairs_helper, t, 0
end

正如您所看到的那样,永远不会使用密钥"test"返回您的条目。

您想要的是pairs(t),相当于next, t 这将迭代所有元素。

答案 1 :(得分:4)

您需要使用pairs代替ipairspairs遍历所有密钥,ipairs仅迭代keys that form a sequence of integers starting from 1 without gaps。 (这些密钥是存储在数组中还是表的散列部分是实现细节,并且可能在表的生命周期内发生变化。)

例如,ipairs({'a', 'b', nil, 'c'})遍历键1和2,停在(并且不包括)3,因为表中缺少该键。