开发者

lua string printing

开发者 https://www.devze.com 2022-12-28 15:06 出处:网络
In C, I have format strings, something like: char *msg = \"wlll you marry me\" fprintf(stderr, \"%s, %s?\", name开发者_Go百科, msg);

In C, I have format strings, something like:

char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name开发者_Go百科, msg);

Now, can I do something similar in lua with format strings? I.e. I want something functionally equivalent to:

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

but not so ugly, in lua.

Okay, so I can do string.format("%s, %s?", name, msg), but can I go even a step further, something like perl style, where I can go:

"%name, %msg?"

Thanks!


According to the Lua Users Wiki article on String Interpolation, Lua does not offer a built-in native way to do this; however, there are a couple sort-of workarounds posted on that page.

Here's one simple implementation (-- 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"


Can I do something similar [to printf] with Lua format strings?

Yes. I do this all the time:

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

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

Modify to taste.

0

精彩评论

暂无评论...
验证码 换一张
取 消