löve2d#array不返回数组

时间:2017-01-14 13:15:13

标签: lua love2d

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相当新。

我准备在该项目的网站上报告这个可能的错误,但我想先确定它是一个错误。

1 个答案:

答案 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都可以视为数组的结尾。尽管看起来很草率,但它似乎是故意

至于看到测试结果的差异,它可能与运行不同的版本有关。检查以确保您为每个测试使用相同版本进行测试。