【发布时间】:2014-11-04 23:23:02
【问题描述】:
我正在从一个类创建对象,并希望稍后对其进行迭代。还有比这更有效的方法吗?
class1 = {}
class1.value1 = "1"
class1.value2 = 2
class1.tvalue1 = {}
function class1:new()
local class = self
local object = {}
setmetatable(object,class)
class.__index = class
object.tvalue1 = {}
table.insert(objects, object) -- to iterate them later, stupid way I think
return object
end
function class1:alterValue1(input)
self.value1 = input
return self.value1
end
function class1:alterValue2(input)
self.value2 = input
return self.value2
end
randomName = class1:new()
otherName = class1:new()
weirdoName = class1:new()
.
.
.
(n)
有没有比在构造函数中将对象插入到某种对象表中更有效的方法来迭代对象?
【问题讨论】:
-
我知道,认为在这个例子中被命名为不好的方式,但这只是一个例子,你应该理解这个问题。
-
为什么你认为目前的方法效率不高?
-
那样做感觉很糟糕,...不知道为什么。
-
好的,如果这个方法是有效的,最好从构造函数返回“objects.object”,而不仅仅是“object”,以确保它引用正确的内存?
-
@Sempie:只有一个对象:局部变量
object和objects[#objects]是相同的(objects.object是不同的东西,可能是nil)。请不要将对象存储在表中会阻止它们被垃圾收集。如果您不希望这样,请将objects设为弱键表,存储objects[object] = true之类的对象,并通过pairs进行迭代。
标签: class object lua lua-table