【发布时间】:2017-08-29 00:38:08
【问题描述】:
所以我有一个 for 循环:
for k, pt in pairs(points) do
self.centers[k] = Center:new() --<centers> is part of my Map object, and Center is an object
local bottomleft = Corner:new()
table.insert(self.centers[k].corners, bottomleft)
...--repeats 4 times for each corner of a square
end
列表中有 256 个点(点),当我尝试检查每个中心对象在列表(中心)中有多少个值时,结果如下:
print(#self.centers[1].corners) --> 1024
我不知道为什么每个 (center.corners) 列表中的值应该是 4 的 4 倍。
我该如何解决这个问题?
编辑:
function Center:new (o)
o = o or {}
setmetatable(o, self)
self.__index = self
return o
end
即Center:new()方法
【问题讨论】:
-
我们能看到积分表和/或新的中心方法吗?
-
我问这个是因为如果 Center:new 返回的是同一个对象,这很容易解释。
-
函数中心:new (o) o = o or {} setmetatable(o, self) self.__index = self return o end
-
您是否为每个对象创建了
Center.corners表?我在Center构造函数中看不到它。它要么在许多Center对象之间共享,要么您的代码应该在table.insert(self.centers[k].corners, ..)上失败并出现运行时错误。请参阅ideone.com/Fbvt4S 上的示例。另一个可能的问题是,如果您的points没有被连续整数索引索引,那么使用self.centers[1]检查第一个中心可能是不正确的,因为pairs() 可以返回不是数字的键,但是points中的任何内容表。 -
另外,关于效率的快速说明,每次创建中心对象时都会设置 self.__index 。你应该事先设置好,所以你不必将它粘贴在构造函数中
标签: arrays for-loop lua square