在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用户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"

其他提示

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

是的。 我一直这样做:

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

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

修改品味。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top