为什么我的 lua table 对象是空的?

Why is my lua table object empty?

我在我的 Map 模块中创建了一个名为 Map 的 lua table 对象,此函数创建了一个新实例:

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 ()

当我打印中心数、角数和 tables 时,它们都为 0。

我有单独的模块用于 Corner:new ()、Center:new () 和 Edge:new ()

为什么中心、角、边的长度输出为0?

编辑:

这是我输入到中心的内容 table 例如(角和边相似)

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

大小总是正方形

这似乎是变量作用域的问题。首先,在实例化一个新的 Map 时,returned 的 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

当您将指向 table 的指针传递给 Map:generateCenters() 时,不需要 return 该指针。中心已添加到 table:

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 )

你是说,"Put the centers into the table pointed to by the table value corresponding to the key called centers in the table called island"。

最后,请注意

local t = island.centers
print( #t )

仍然不会输出 table centers 中的元素数量,因为有间隙键(即它们不会去 {0,1,2,3,4,.. } 而是 pointToKey() 函数 returns 中的任何字符串)。要计算 centers 中的元素,您可以这样做:

local count = 0
for k,v in pairs( island.centers ) do
    count = count + 1
end
print( count )