我在Map模块中创建了一个名为Map的lua表对象,该函数创建了一个新实例:
function Map:new (o)
o = o or {
centers = {},
corners = {},
edges = {}
}
setmetatable(o, self)
self.__index = self
return o
end
在我的岛模块中,我在前几行中输入了这段代码:
local map = require (*map module location*)
Island = map:new ()
当我打印中心,角落和桌子的数量时,它们都会出现0。
我为Corner提供了单独的模块:new(),Center:new()和Edge:new()
为什么中心,角和边的长度输出为0?
编辑:
这是我输入中心表的例子(角和边是类似的)
function pointToKey(point)
return point.x.."_"..point.y
end
function Map:generateCenters(centers)
local N = math.sqrt(self.SIZE)
for xx = 1, N do
for yy = 1, N do
local cntr = Center:new()
cntr.point = {x = 0.5+xx - 1, y = 0.5+yy - 1}
centers[pointToKey(cntr.point)] = cntr
end
end
return centers
end
尺寸始终是完美的正方形
答案 0 :(得分:1)
这似乎是范围可变的问题。首先,在实例化新Map
时,返回的o
应为local
:
function Map:new (o)
local o = o or { -- this should be local
centers = {},
corners = {},
edges = {}
}
setmetatable(o, self)
self.__index = self
return o
end
当您将指向表的指针传递给Map:generateCenters()
时,无需返回该指针。这些中心已被添加到该表中:
function Map:generateCenters(centers)
local N = math.sqrt(self.SIZE)
for xx = 1, N do
for yy = 1, N do
local cntr = Center:new()
cntr.point = {x = 0.5+xx - 1, y = 0.5+yy - 1}
centers[pointToKey(cntr.point)] = cntr -- HERE you're adding to the table passed as an argument
end
end
-- return centers --> NO NEED TO RETURN THIS
end
最后,你会这样做:
local map = require( "map" )
local island = map:new()
map:generateCenters( island.centers )
您说,"将中心放入与名为centers
"的表中名为island
的键对应的表值所指向的表中。
最后,请注意
local t = island.centers
print( #t )
仍然不会输出表centers
中的元素数量,因为存在间隙键(即它们不会出现{0,1,2,3,4,...}而是等等字符串pointToKey()
函数返回)。要计算centers
中的元素,您可以执行以下操作:
local count = 0
for k,v in pairs( island.centers ) do
count = count + 1
end
print( count )