Форматирование строк Lua в Python стиле

Опубликовано в QLua

В Lua имеется функция string.format, позволяющая формировать строку с использованием значений переменных или вычисляемых значений. Можно ли создать механизм формирования строк, аналогичный тому, что используется в Python версии 3?

Оказывается, это несложно и не несет существенной нагрузки. Вот примерчик:

function python_format(s, tab)
   return (s:gsub('(%b{})', function(x)
                                         return tab[x:sub(2, -2)] or "????"
                                      end))
end
 
print(python_format("Site URL {domain}.{zone}", {domain = "bot4sale", zone = "ru"}) )
 
Результат
Site URL bot4sale.ru

 

Можно даже создать собственный метаметод для строкового типа для полного фэн-шуя

 

getmetatable("").__mod = python_format
print("Site URL {domain}.{zone}" % {domain = "bot4sale", zone = "ru"})
 
Результат
Site URL bot4sale.ru

Архив QLua