Lua表/列表字符串转换/连接

是否有更高效但更简单的方法,可以将列表(仅具有一级的表)转换为字符串,而不是使用匿名函数的方式?

为什么要这样问呢?我听说在Lua中反复使用字符串连接对内存效率非常低,因为Lua字符串是不可变对象,一旦使用过就必须将其丢给垃圾回收器。

所以,使用匿名函数时,我的意思是这个样子的:

local resources = {
    ["bread"] = 20,
    ["meat"] = 5,
    ["something"] = 99
};

local function getTheText()
    return "资源:\n"..
        ( (function()
             local s = "";
             for k, v in pairs(resources) do
                 s = s.."\n\t"..k..": "..v.." 单位。";
             end
             return s;
        )())..
        "\n更多资讯...";
   end
end

你知道,这个时候我可以使用元函数,比如对这个表用_tostring_,因为它不会改变。但是如果我使用其他匿名的表,我将没有这个选项。

无论如何,我喜欢匿名函数的用法,所以这对我不是一个问题。


是否有更高效的方法,不需要声明函数?这是否比使用元方法更有效?

点赞
用户2726734
用户2726734
local function getTheText()
    local temp = {"资源:"}
    for k,v in pairs(resources) do
        temp[#temp + 1] = "\t"..k..": "..v.." 单位。"
    end
    temp[#temp + 1] = "更多令人惊叹的信息……"
    return table.concat(temp, "\n")
end

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

这个问题在 PIL 中有涉及。

2016-07-21 17:23:11