Lua表/列表字符串cast / concat

时间:2016-07-21 15:44:42

标签: string lua concat

当将一个列表(一个只有一个级别的表)转换为字符串时,是否有更高效但更简单的方法匿名函数

为什么要问这个?我听说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

你知道,这次我可以在这张桌子上使用一个元函数,就像 tostring 一样,因为它不会改变,但如果我使用其他匿名表我没有这个选项。

无论如何我喜欢匿名使用函数,所以对我来说这不是问题。

是否有更高效的需要声明功能?这比使用metamethod更有效还是更低效?

1 个答案:

答案 0 :(得分:3)

local function getTheText()
    local temp = {"Resources:"}
    for k,v in pairs(resources) do
        temp[#temp + 1] = "\t"..k..": "..v.." units."
     end
     temp[#temp + 1] = "More Awesome info..."
     return table.concat(temp, "\n")
end

table.concat将有效地构建字符串并使用比通过s = s ..连接更少的内存。

PIL

中介绍了此问题