'pp' for D?

Daniel Davidson nospam at spam.com
Mon Sep 30 17:18:51 PDT 2013


On Sunday, 29 September 2013 at 14:31:15 UTC, linkrope wrote:
> I want to pretty-print the representation of a value of a 
> generic type T.
> In Ruby, I would use 'pp':
>
>     value = 'hello'
>     pp value  # prints "hello" - with quotes!
>     value = 42
>     pp value  # prints 42
>
> Now, value.to!string eliminates the quotes, should value be of 
> type string.
> As a workaround, I put the value into an array to make use of 
> the "undocumented" function formatElement:
>
>     "%(%s%)".format([value])
>
> Ugly! Where does Phobos hide the function I'm looking for?

I have one at: 
https://github.com/patefacio/d-help/blob/master/d-help/pprint/pp.d

The following code outputs the text below:

     import std.stdio;
     import pprint.pp;

     enum Color {
       Red,
       White,
       Blue
     }

     struct R {
       int x = 22;
       string s = "foobar";
     }

     struct S {
       int i;
       R r;
     }

     struct T {
       int []i;
       string []j;
     }


     void main() {
       auto s = S(3);
       auto t = T([1,2,3], ["a", "b", "c"]);

       writeln(pp(Color.Red));
       writeln(pp(42));
       writeln(pp("hello"));
       writeln(pp(s));
       writeln(pp(t));
     }


Outputs

     Red
     42
     "hello"
     {
      (S).i = 3
      (S).r = {
       (R).x = 22
       (R).s = "foobar"
      }
     }
     {
      (T).i = [
       [0]->1
       [1]->2
       [2]->3
      ]
      (T).j = [
       [0]->"a"
       [1]->"b"
       [2]->"c"
      ]
     }



More information about the Digitalmars-d-learn mailing list