Just because it's a slow Thursday on this forum

John Colvin via Digitalmars-d digitalmars-d at puremagic.com
Sun Feb 7 16:11:11 PST 2016


On Sunday, 7 February 2016 at 23:26:05 UTC, Andrei Alexandrescu 
wrote:
> On 02/04/2016 09:46 PM, Tofu Ninja wrote:
>> On Thursday, 4 February 2016 at 15:33:41 UTC, Andrei 
>> Alexandrescu wrote:
>>> https://github.com/D-Programming-Language/phobos/pull/3971 -- 
>>> Andrei
>>
>> People one github were asking for a dump function so they 
>> could do
>>       int a = 5;
>>       dump!("a"); // prints "a = 5"
>>
>>
>> Here's a working version if anyone wants it but you have to 
>> use it like
>>       mixin dump!("a");
>>
>>
>> //------------------------------------------------
>>
>> mixin template dump(Names ... )
>> {
>>      auto _unused_dump = {
>>          import std.stdio : writeln, write;
>>          foreach(i,name; Names)
>>          {
>>              write(name, " = ", mixin(name), 
>> (i<Names.length-1)?", ":
>> "\n");
>>          }
>>          return false;
>>      }();
>> }
>>
>> unittest{
>>      int x = 5;
>>      int y = 3;
>>      int z = 15;
>>
>>      mixin dump!("x", "y"); // x = 5, y = 3
>>      mixin dump!("z");      // z = 15
>>      mixin dump!("x+y");    // x+y = 8
>>      mixin dump!("x+y < z");// x+y < z = true
>> }
>
> This is useful and we should include it. How would you improve 
> the code to allow dumping to a different File than stdout (e.g. 
> most often stderr)? -- Andrei

Something like this?

import std.stdio : File, stderr, stdout;

template dumpTo(alias output)
if (isInstanceOf!(File, output))
{
     mixin template dumpTo(Names ... )
     {
         auto _unused_dump = {
             import std.traits : Select;
             foreach (i, name; Names)
             {
                 output.write(name, " = ", mixin(name),
                     Select!(i < Names.length - 1, ", ", '\n'));
             }
             return false;
         }();
     }
}

alias dump = dumpTo!stdout;
alias errDump = dumpTo!stderr;


More information about the Digitalmars-d mailing list