2010-05-01 210 views
1

在C,我有格式字符串,是這樣的:LUA字符串打印

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

現在,我可以做與格式字符串LUA類似的東西?即我想要的東西在功能上等同於:

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

但在盧阿不是那麼難看。 ( 「?%S,S」 的名字,味精)

好了,所以我可以做的String.Format,但我還可以走的一步,像perl的風格,在那裏我可以去:

"%name, %msg?" 

謝謝!

回答

6

根據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" 
1

我可以做類似的和Lua格式字符串的東西[給printf]?

是的。我一直這樣做:

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

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

修改成品味。