Кратчайший способ объединения строк в D вне writefln()?

Мне действительно нужно объединить строки формата, и мне интересно, каков самый короткий (или самый простой для чтения) способ объединения строк вне функции writefln() в D?

То есть мне нравится поведение writefln, где вы можете сделать, например:

// Some code to init y="2013", m="01", d="02" ...
writefln("%s-%s-%s", y, m, d);

... но я хочу сделать это без записи на стандартный вывод. Есть ли такой же простой способ?

Единственная мысль, которую я нашел, - это функция форматирования в std.string, но для этого требуется, чтобы вы указали строковый буфер заданной длины в качестве первого аргумента, что неудобно в большинстве случаев.

Другой альтернативой, которую я обнаружил, было сделать (используя "join" в std.array):

// Some code to init y="2013", m="01", d="02" ...
datestr = [y, m, d].join("-");

... что очень удобно, но работает, только если вы используете тот же "разделитель", конечно.

Есть ли более общий способ сделать это, который короче приведенных выше примеров, и не требует предоставления строки буфера предопределенной длины?

1 ответ

Решение

Вы, кажется, путаете format с sformat, format делает именно то, что вы хотите:

datestr = format("%s-%s-%s", y, m, d);

Еще лучше: для выявления потенциальных несоответствий между строкой форматирования и аргументами во время компиляции, а не во время выполнения:

datestr = format!"%s-%s-%s"(y, m, d);

Самый простой способ объединить строки будет с ~:

datestr = y ~ "-" ~ m ~ "-" ~ d;

Подробнее об этом: http://dlang.org/arrays.html

Другие вопросы по тегам