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

以下脚本在从1到13的范围内查找质数。 当我显式迭代包含结果的表时,我可以看到脚本按预期工作。然而,如果我在表上使用unpack()函数,只有前3个数字会被打印出来。

来自文档: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
点赞
用户3735873
用户3735873

将下面翻译成中文并且保留原本的 markdown 格式,

修改

primes[idx] = n

primes[#primes+1] = n

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

2015-12-29 21:11:32