代码之家  ›  专栏  ›  技术社区  ›  anon

lua字符串打印

  •  1
  • anon  · 技术社区  · 15 年前

    在C语言中,我有格式字符串,比如:

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

    现在,我可以用格式字符串在lua中做类似的事情吗?也就是说,我想要一些功能相当于:

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

    但在卢阿,没那么难看。

    好的,我可以做string.format(“%s、%s?”,name,msg),但我能更进一步吗,比如Perl风格,我可以这样做:

    "%name, %msg?"
    

    谢谢!

    2 回复  |  直到 15 年前
        1
  •  6
  •   Mark Rushakoff    15 年前

    根据 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
  •  1
  •   Norman Ramsey    15 年前

    我能用lua格式的字符串做些类似于printf的事情吗?

    对. 我总是这样做:

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

    根据口味修改。