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_Scripting_Instantiation_Lua Table - Fatal编程技术网

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

为什么我的lua表对象是空的?,lua,scripting,instantiation,lua-table,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 在我的island模块中,我在前几行输入了以下代码: local map = require (*ma

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

function Map:new (o)
    o = o or {
    centers = {},
    corners = {},
    edges = {}
   }
    setmetatable(o, self)
    self.__index = self
    return o
end
在我的island模块中,我在前几行输入了以下代码:

local map = require (*map module location*)
Island = map:new ()
当我打印出中心、角落和桌子的数量时,它们都是0

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

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

编辑:

例如,这就是我输入到中心表中的内容(角和边类似)


大小总是一个完美的正方形

这似乎是可变范围的问题。首先,在实例化新的
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 )
您的意思是,“将中心放入表中,该表由表值指向,该表值对应于名为
孤岛
的表中名为
中心
的键。”

最后,请注意

local t = island.centers
print( #t )
仍然不会输出表
centers
中的元素数,因为存在间隙键(即它们不是{0,1,2,3,4,…}),而是
pointToKey()函数返回的任何字符串)。要计算
中心中的元素,可以执行以下操作:

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

map:new()
返回一个表,其中包含指向空表的键
角点
等。为什么您希望大小不同于零?在检查
孤岛.角落
中的元素数之前,您正在执行
table.insert(Island.corners,Corner:new())
?@GoojajiGreg再次检查,我明白您的意思,所以我进行了更深入的研究。很抱歉混淆了
o
是本地的,因为它是一个参数。@lhf哦,当然了。谢谢你指出这一点。摘自第15章“Lua编程”:参数与局部变量一样工作,使用函数调用中给出的实际参数初始化。可以使用与其参数数量不同的参数来调用函数。Lua将参数的数量调整为参数的数量,就像它在多重赋值中所做的那样:多余的参数被丢弃;额外参数为零。”
local count = 0
for k,v in pairs( island.centers ) do
    count = count + 1
end
print( count )