我在 Lua 中有一个对表进行操作的函数,向表中重复添加条目:
function DoStuff()
local table = {};
for i = 1, 1000 do
local name, value = GetSomething(i);
if (CheckSomething(name, value))
table[name] = value
end;
end;
end;
我知道这很快;Lua 有一个很好的哈希表算法。但现在我需要拆分我的部分功能,所以我可以对其进行单元测试:
function DoStuff()
local table = {};
for i = 1, 1000 do
local name, value = GetSomething(i);
--split out checking so it's testable
table = ParseTheThing(table, name, value);
end;
end;
我知道Lua 不支持通过引用传递参数,相反,如果我需要向 my 添加一个项目table
,Lua 将制作一个副本,我必须返回该副本:
--Core checking function
function ParseTheThing(table, name, value)
if (CheckSomething(name, value))
table[name] = value
end;
return table;
end;
所以在我看来,每次我调用CheckSomething
Lua 都会创建另一个表,需要进行垃圾收集。
或者可能不是。也许 Lua确实支持通过引用传递参数,我可以简单地调用:
ParseTheThing(table, name, value);
--Core checking function
function ParseTheThing(table, name, value)
if (CheckSomething(name, value))
table[name] = value
end;
end;
如果我像我所做的那样重构我的代码,Lua 的垃圾收集器会被迫做更多的工作吗?
备注:
- 不要将问题中使用的简化示例与我要问的问题混淆。
- 我没有任何方法可以测量内存使用情况或集合数量,所以我无法尝试。