On 06/11/2009 07:34, Don wrote:
Nick Sabalausky wrote:
"Don" <nos...@nospam.com> wrote in message
news:hcvf9l$91...@digitalmars.com...
Justin Johansson wrote:
So what does "toString" mean to you?
It's a hack from the early days of D. Should be unavailable unless
the -debug flag is set, to discourage people from using it. I hate it.
What don't you like about it?
It cannot even do the most basic stuff.
(1) You can't even make a struct that behaves like an int.
struct MyInt
{
int z;
string toString() { .... }
}
void main()
{
int a = 400;
MyInt b = 400;
writefln("%05d %05d", a, b);
writefln("%x %x", a, b);
}
(2) It doesn't behave like a stream. Suppose you have XmlDoc.toString()
You can't emit the doc, piece by piece. You have to create the ENTIRE
string in one go!
The first issue you raise is IMO a problem with writefln and not with
toString since writefln doesn't handle user-defined types properly.
I think that writefln (btw, horrible name) should only deal with strings
and their formatting and all other types need to provide an (optionally
formatted) string.
a numeric type would provide formatting of properties like number of
decimal places, thousands separator, etc while user defined
specification type could provide a type of standard format.
auto spec = new Specification(HTML);
string ansi = spec.toString(Specification.ANSI);
string iso = spec.toString(Specification.ISO);
writefln ("{1} {0}", ansi, iso); // i'm using the tango/C# formatting
the c style format string that specifies types is a horrible horrible
thing and should be removed.
regarding the second issue:
forech (node; XmlDoc.preOrder()) writfln("{0}", node.toString());