Vanilla Lua代码(新空项目):
local array = {1,2,3,4,5}
array[3] = nil
array[4] = nil
print(#array) -- returns 5
Löve2d代码(新空项目):
function love.load()
local array = {1,2,3,4,5}
array[3] = nil
array[4] = nil
print(#array) -- returns 2 (bug?)
end
它应该如何工作还是一个错误?
Lua wiki说:#运算符不计算表中的所有项(!)。相反,它会找到最后一个整数(非小数)键。
所以我认为这是一个错误,但我不确定,因为我对Lua和Löve2d相当新。
我准备在该项目的网站上报告这个可能的错误,但我想先确定它是一个错误。
答案 0 :(得分:1)
根据documentation on The Length Operator #
:
长度运算符由一元运算符#表示。的长度 字符串是它的字节数(也就是字符串的通常含义) 每个字符为一个字节时的长度。)
表t的长度被定义为任何整数索引n t [n]不为零,t [n + 1]为零;而且,如果t [1]为零,则n可以为 零。对于常规数组,非nil值从1到给定n, 它的长度恰好是n,它的最后一个值的索引。 如果 数组有“空洞”(即其他非零值之间的空值), 那么#t可以是直接在nil值之前的任何索引 (也就是说,它可以将任何这样的nil值视为数组的结尾)。
强调我的。它似乎就是它的设计方式。 任何 nil
都可以视为数组的结尾。尽管看起来很草率,但它似乎是故意。
至于看到测试结果的差异,它可能与运行不同的版本有关。检查以确保您为每个测试使用相同版本进行测试。