Lua字符串打印

在 C 语言中,我有类似这样的格式串:

char *msg = "你愿意嫁给我吗?"
fprintf(stderr, "%s, %s?", name, msg);

现在,我想在 Lua 中做类似的事情,使用格式化字符串。例如,我想要这样的字符串:

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

但是,我希望这样的代码看起来不那么丑陋。

好的,那么我可以使用 string.format("%s, %s?", name, msg) 来实现,但是我是否可以更进一步,像 Perl 那样使用以下代码:

"%name, %msg?"

谢谢!

原文链接 https://stackoverflow.com/questions/2748373

点赞
stackoverflow用户126042
stackoverflow用户126042

根据Lua用户Wiki关于字符串插值的文章,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"} )
— 输出“foo is bar”
2010-05-01 00:29:40
stackoverflow用户41661
stackoverflow用户41661

我可以用 Lua 的格式化字符串做类似 printf 的功能吗?

可以。 我经常这样用:

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

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

根据需要进行修改。

2010-05-01 14:47:37