Кратчайший способ объединения строк в 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