Just because it's a slow Thursday on this forum
Jakob Ovrum via Digitalmars-d
digitalmars-d at puremagic.com
Tue Feb 9 04:46:34 PST 2016
On Monday, 8 February 2016 at 13:37:19 UTC, Andrei Alexandrescu
wrote:
> On 2/7/16 7:11 PM, John Colvin wrote:
>> alias dump = dumpTo!stdout;
>> alias errDump = dumpTo!stderr;
>
> I'm hoping for something with a simpler syntax, a la
> dump!(stdout, "x") where stdout is optional. -- Andrei
This works:
---
import std.stdio : File;
static import std.ascii;
template dump(symbols...)
{
import std.stdio : File;
void dump(Separator, Terminator)(
File file,
Separator separator = ", ",
Terminator terminator = std.ascii.newline)
{
foreach(i, symbol; symbols[0 .. $ - 1])
file.write(__traits(identifier, symbols[i]), " = ", symbol,
separator);
file.write(__traits(identifier, symbols[$ - 1]), " = ",
symbols[$ - 1], terminator);
}
void dump(Separator, Terminator)(
Separator separator = ", ",
Terminator terminator = std.ascii.newline)
if (!is(Separator == File))
{
import std.stdio : stdout;
.dump!symbols(stdout, separator, terminator);
}
}
void main()
{
import std.stdio : stdout;
int a = 42;
string b = "foo";
float c = 3.14;
dump!(a, b, c)(); // a = 42, b = foo, c = 3.14
stdout.dump!(a, b, c)(" | "); // a = 42 | b = foo | c = 3.14
}
---
I'm not a fan of non-trivial string mixins except in extenuating
circumstances. I tried compressing it to a single call to `write`
like your `print` except using staticMap, but like I often do I
ran into "template instance foo cannot use local 'bar' as
parameter to non-global template baz" errors.
More information about the Digitalmars-d
mailing list