【问题标题】:lua string printinglua字符串打印
【发布时间】:2010-05-01 00:25:06
【问题描述】:

在 C 中,我有格式字符串,例如:

char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);

现在,我可以在 lua 中使用格式字符串做类似的事情吗? IE。我想要功能等同于:

name .. ", " .. msg .. "?"

但不是那么丑,在 lua 中。

好的,我可以做 string.format("%s, %s?", name, msg),但我可以更进一步,比如 perl 风格,我可以去哪里:

"%name, %msg?"

谢谢!

【问题讨论】:

    标签: lua format-string


    【解决方案1】:

    根据Lua Users Wiki article on String Interpolation,Lua 不提供内置的本地方式来执行此操作;但是,该页面上发布了几种解决方法。

    这是一个简单的实现(-- RiciLake):

    function interp(s, tab)
      return (s:gsub('($%b{})', function(w) return tab[w:sub(3, -2)] or w end))
    end
    print( interp("${name} is ${value}", {name = "foo", value = "bar"}) )
    
    getmetatable("").__mod = interp
    print( "${name} is ${value}" % {name = "foo", value = "bar"} )
    -- Outputs "foo is bar"
    

    【讨论】:

      【解决方案2】:

      我可以用 Lua 格式字符串做类似 [to printf] 的事情吗?

      是的。我一直这样做:

      local function printf(...) return io.stdout:write(string.format(...)) end
      
      local function fprintf(f, ...) return f:write(string.format(...)) end
      

      根据口味修改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-07-25
        • 1970-01-01
        • 2018-07-24
        • 2021-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多