digitalmars.D - writef and formatting specs
- Kevin Bealer (44/44) Sep 30 2004 I love the writef(".. %s..", object) concept. But I have a suggestion:
- Walter (1/1) Oct 01 2004 That's a good idea. -Walter
I love the writef(".. %s..", object) concept.  But I have a suggestion:
What if the toString() method had a second variant:
:class Object
:{
:    char[] toString();
:    char[] toString(int Flags, int Width, int Precision)
:    {
:        // default to no-parameter version
:        return toString();
:    }
:}
This second variety could be overridden to let the object code customize the
output, based on the flags and widths modifiers.
Taking a hypothetical "class DateTime", you could produce:
"9/30"
"2004-09-30"
"September 30th, 2004. 21:42.0123 EST"
. Automatically compensating for field width.
Also, non-primitive "numerical" types (matrix!(double)?) could format their
contents accordingly, passing down the parameters.
:class IntList {
:    T[] values;
:    char[] toString(int Flags, int Width, int Precision)
:    {
:        char[] output;
:        foreach(...) {
:            foreach(T key; ...)
:                output ~= key.toString(Flags, Width, Precision) ~ ", ";
:            }
:            output ~= "\n"
:        }
:    }
:}
: IntList foo;
: writef("%4.4s", foo);
is like:
: writef("%4.4s, ", foo[0]);
: writef("%4.4s, ", foo[1]);
: ...
I know the Width can already be handled by writef(), but it would be neat to
have Width, so that (for example), word-breaking (not to be confused with
oath-breaking) could be done with certain kinds of text objects. and for
efficiency.
Kevin
 Sep 30 2004








 
  
  
  "Walter" <newshound digitalmars.com>
 "Walter" <newshound digitalmars.com>