Adam D. Ruppe: > I do a lot. The way I do it is the arguments are made > available to the format, but it doesn't always need them > at runtime. > > string f = showNames ? "%1$s\t%2$d" : "%2$d"; > writefln(f, name, number); > > Though I don't literally use writefln for most > my code the same idea applies.
Python is strict here: >>> "%d" % (1) '1' >>> "%d" % (1, 2) Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: not all arguments converted during string formatting Even if you use that idiom, it has costs, measured in bugs. My experience tells me that a sloppy semantics, introduced or kept for a little convenience, always manages to find a way to bite your ass later. So I'd like more tidyness here. You are allowed to write: if (showNames) writeln("%1$s\t%2$d", name, number); else writeln("%2$d", name); There are also other solutions that don't compromise the already low safety of writeln, that is a dynamically typed isle in a statically typed language. Bye, bearophile