为什么我的 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 )
我在我的 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 )