解释为什么unpack()在Lua中返回不同的结果

时间:2015-12-29 20:52:20

标签: lua lua-table

以下脚本查找1到13范围内的素数。 当我显式迭代包含结果的表时,我可以看到脚本按预期工作。但是,如果我在表格上使用unpack()功能,则只打印出前3个数字。

来自docs:unpack“一个具有多个返回的特殊函数。它接收一个数组并从数组中返回所有元素,从索引1”开始。

为什么它不能在下面的脚本中工作?

t = {}
for i=1, 13 do t[i] = i end

primes = {}
for idx, n in ipairs(t) do
  local isprime = true
  for i=2, n-1 do
    if n%i == 0 then
      isprime = false
      break
    end
  end
  if isprime then
    primes[idx] = n
  end
end
print('loop printing:')
for i in pairs(primes) do
  print(i)
end
print('unpack:')
print(unpack(primes))

运行

$ lua5.3 primes.lua
loop printing:
1
2
3
5
7
13
11
unpack:
1   2   3

1 个答案:

答案 0 :(得分:4)

更改

primes[idx] = n

primes[#primes+1] = n

原因是idx不是连续的,因为不是每个数字都是素数。