解释为什么 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 不是连续的,因为并非每个数字都是质数。
以下脚本查找 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 不是连续的,因为并非每个数字都是质数。