1

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

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

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

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

但在lua中并没有那么难看。

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

"%name, %msg?"

谢谢!

4

2 回答 2

6

根据关于字符串插值的 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"} )
-- Outputs "foo is bar"
于 2010-05-01T00:29:40.677 回答
1

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

是的。我一直这样做:

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

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

修改口味。

于 2010-05-01T14:47:37.333 回答