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

Explain why unpack() returns different results in Lua

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

来自文档:unpack"a special function with multiple returns. It receives an array and returns as results all elements from the array, starting from index 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

改变

primes[idx] = n

primes[#primes+1] = n

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