【发布时间】:2016-07-21 15:44:41
【问题描述】:
在将列表(只有一层的表)转换为字符串时,有没有比匿名函数更高效但更简单的方法?
为什么要问这个?我听说 Lua 中一遍又一遍的字符串连接是内存效率低下,因为 Lua 字符串是不可变的对象,一旦使用就必须扔给垃圾收集器。
所以对于匿名函数使用我的意思是:
local resources = {
["bread"] = 20,
["meat"] = 5,
["something"] = 99
};
local function getTheText()
return "Resources:\n"..
( (function()
local s = "";
for k, v in pairs(resources) do
s = s.."\n\t"..k..": "..v.." units.";
end
return s;
)())..
"\nMore awesome info...";
end
end
你知道,这次我可以在这张桌子上使用 a 元函数,比如 tostring,因为它不会改变,但如果我使用其他 匿名表我不会有这个选项。
无论如何,我喜欢函数的匿名使用,所以这对我来说不是问题。
还有什么更高效的不需要需要声明函数吗?这比使用元方法效率更高还是更低?
【问题讨论】:
-
你的“匿名函数”有什么相关性?它只是添加了一个闭包创建和一个函数调用。
-
实际上根本不是“内存消耗问题”,这只是我想指出的,因为有时我需要连接“内联”并且不重用该函数。谢谢!