lua字符串打印

lua字符串打印,lua,format-string,Lua,Format String,在C中,我有格式字符串,类似于: char *msg = "wlll you marry me" fprintf(stderr, "%s, %s?", name, msg); 现在,我可以用格式字符串在lua中执行类似的操作吗?也就是说,我想要功能等同于: name .. ", " .. msg .. "?" 但在卢阿并没有那么难看 好的,我可以使用string.format%s、%s?、name、msg,但是我可以更进一步,比如perl风格,我可以在哪里: "%name, %msg?"

在C中,我有格式字符串,类似于:

char *msg = "wlll you marry me"
fprintf(stderr, "%s, %s?", name, msg);
现在,我可以用格式字符串在lua中执行类似的操作吗?也就是说,我想要功能等同于:

name .. ", " .. msg .. "?"
但在卢阿并没有那么难看

好的,我可以使用string.format%s、%s?、name、msg,但是我可以更进一步,比如perl风格,我可以在哪里:

"%name, %msg?"
谢谢

根据,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不提供内置的本地方式来实现这一点;然而,该页面上发布了一些变通方法

下面是一个简单的实现—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
改变口味

我可以用Lua格式的字符串执行类似于printf的操作吗

对。我一直在这样做:

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

local function fprintf(f, ...) return f:write(string.format(...)) end
改变口味