Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Lua中的奇怪表错误_Lua_Coronasdk - Fatal编程技术网

Lua中的奇怪表错误

Lua中的奇怪表错误,lua,coronasdk,Lua,Coronasdk,好的,我对以下Lua代码有一个奇怪的问题: function quantizeNumber(i, step) local d = i / step d = round(d, 0) return d*step end bar = {1, 2, 3, 4, 5} local objects = {} local foo = #bar * 3 for i=1, #foo do objects[i] = bar[quantizeNumber(i, 3)] end pr

好的,我对以下Lua代码有一个奇怪的问题:

function quantizeNumber(i, step)
    local d = i / step
    d = round(d, 0)
    return d*step
end

bar = {1, 2, 3, 4, 5}

local objects = {}
local foo = #bar * 3
for i=1, #foo do
    objects[i] = bar[quantizeNumber(i, 3)]
end
print(#fontObjects)
运行此代码后,对象的长度应该是15,对吗?但是不,是4。这是如何工作的,我错过了什么

谢谢,埃利奥特·博纳维尔。

是的,现在是4点

从Lua参考手册:

表t的长度定义为任意整数索引n,使得t[n]不是nil,t[n+1]是nil;此外,如果t[1]为零,则n可以为零。对于从1到给定n的非零值的正则数组,其长度正好是其最后一个值的索引n。如果数组中有空穴,即其他非零值之间的零值,那么T可以是直接在零值之前的任何索引,也就是说,它可以考虑任何这样的零值作为数组的结尾。 让我们修改代码以查看表中的内容:

local objects = {}
local foo = #bar * 3
for i=1, foo do
    objects[i] = bar[quantizeNumber(i, 3)]
    print("At " .. i .. " the value is " .. (objects[i] and objects[i] or "nil"))
end
print(objects)
print(#objects)
运行此命令时,您会看到对象[4]是3,而对象[5]是零。以下是输出:

$ lua quantize.lua 
At 1 the value is nil
At 2 the value is 3
At 3 the value is 3
At 4 the value is 3
At 5 the value is nil
At 6 the value is nil
At 7 the value is nil
At 8 the value is nil
At 9 the value is nil
At 10 the value is nil
At 11 the value is nil
At 12 the value is nil
At 13 the value is nil
At 14 the value is nil
At 15 the value is nil
table: 0x1001065f0
4
的确,你填补了15个席位。但是,参考手册中定义的表上操作员并不关心这一点。它只是查找一个值不是nil的索引,其后续索引是nil

在这种情况下,满足此条件的索引为4

这就是为什么答案是4。卢阿就是这样

可以将nil视为表示数组的结尾。这有点像C中字符数组中间的零字节实际上是字符串的结尾,而字符串只是前面的字符。

如果您的目的是生成表1,1,1,2,2,3,3,4,4,5,5,那么您需要按照以下方式重写量化函数:

function quantizeNumber(i, step)
    return math.ceil(i / step)
end
函数quantizeNumber错误。您要查找的函数是math.fmod:

objects[i] = bar[math.fmod(i, 3)]

但酒吧有五个元素长。我应该做一个从1到15的for循环,15是条*3的长度,正如我前面指定的。这不应该给我留下15件东西吗?为什么我会得到4个项目?@Elliot,我在编辑我的答案时回答了这个问题。好吧,我把数组填到第4项。为什么它没有超过指数4?我希望输出像这样:1,1,1,2,2,2,3,3。。。5, 5, 5. 为什么不是呢?我做错了什么?在这种情况下,quantizeNumber函数是错误的。请参阅答案的最新附录。我相信这是从一个更大的项目中提取出来的,但其中有很多错误。e、 因为foo不是一张桌子,所以foo不起作用。fontObjects没有定义我猜你指的是Object。