我正在从类中创建对象,并希望稍后迭代它们。有没有比这更有效的方法?
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)
是否有更有效的方法来迭代对象,而不是将它们插入到构造函数中的某种对象表中?
答案 0 :(得分:1)
您使用的方法是将class1
的每个“实例”插入名为objects
的表中。如果要遍历class1
的所有实例,即使用for
循环在每个实例上执行某些操作,那么您没有选择,您必须将实例存储在表,正如你所做的那样。
接下来的问题是,该表存在的位置会对性能产生影响吗?在Lua中,本地(和upvalues)的访问具有比访问全局变量稍微好一点的性能,但差异是否重要取决于你需要对全局变量做什么,而在迭代的情况下,你在迭代。例如,请参阅Optimizing Using Local Variables。
在很可能的情况下,迭代循环体内的操作会产生任何差异(表格在本地与全局之间)无关紧要。您可能希望查看What can I do to increase the performance of a Lua program?,但最重要的是,只能根据
进行优化os.clock
,可能还有类似PepperFish的内容 - 请注意:我没有尝试过。