为什么我的lua表对象为空?

时间:2017-04-13 22:01:22

标签: lua scripting instantiation lua-table

我在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

尺寸始终是完美的正方形

1 个答案:

答案 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 )