以下脚本查找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
答案 0 :(得分:4)
更改
primes[idx] = n
到
primes[#primes+1] = n
原因是idx不是连续的,因为不是每个数字都是素数。