Вопрос

В C у меня есть строки формата, что -то вроде:

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

Теперь, могу ли я сделать что -то подобное в Lua с помощью форматов? Т.е. я хочу что -то функционально эквивалентное:

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

Но не так уродливо, в Луа.

Итак, я могу сделать String.format (« %s, %s?», Имя, MSG), но могу ли я пойти еще на шаг дальше, что -то вроде стиля Perl, куда я могу пойти:

"%name, %msg?"

Спасибо!

Это было полезно?

Решение

Согласно LUA пользователей Wiki статья о строковой интерполяции, Луа не предлагает встроенного родного способа сделать это; Тем не менее, на этой странице размещаются пара видов обходных путей.

Вот одна простая реализация (- 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"

Другие советы

Могу ли я сделать что -то подобное [Printf] с помощью строк формата Lua?

Да. Я все время это делаю:

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