Semantics of toString
Pelle Månsson
pelle.mansson at gmail.com
Fri Nov 6 02:34:19 PST 2009
Yigal Chripun wrote:
> On 06/11/2009 07:34, Don wrote:
>> Nick Sabalausky wrote:
>>> "Don" <nospam at nospam.com> wrote in message
>>> news:hcvf9l$91i$1 at 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.
How do you do %.3f in {}-notation?
Your formatting string should be written as writeln(ansi, " ", iso);
More information about the Digitalmars-d
mailing list