Semantics of toString

Bill Baxter wbaxter at gmail.com
Tue Nov 10 17:39:11 PST 2009


On Tue, Nov 10, 2009 at 5:27 PM, Andrei Alexandrescu
<SeeWebsiteForEmail at erdani.org> wrote:
> Bill Baxter wrote:
>>
>> 2009/11/10 Andrei Alexandrescu <SeeWebsiteForEmail at erdani.org>:
>>>
>>> Denis Koroskin wrote:
>>>>
>>>> On Wed, 11 Nov 2009 02:49:54 +0300, Andrei Alexandrescu
>>>> <SeeWebsiteForEmail at erdani.org> wrote:
>>>>
>>>>> Don wrote:
>>>>>>
>>>>>> Lutger wrote:
>>>>>>>
>>>>>>> Don wrote:
>>>>>>> ...
>>>>>>>>
>>>>>>>> There is a definite use for such as thing. But the existing
>>>>>>>> toString()
>>>>>>>> is much, much worse than useless. People think you can do something
>>>>>>>> with
>>>>>>>> it, but you can't.
>>>>>>>> eg, people have asked for BigInt to support toString(). That is an
>>>>>>>> over-my-dead-body.
>>>>>>>
>>>>>>> Since you are in the know and probably the biggest toString() hater
>>>>>>> around: are there plans (or rejections thereof) to change toString()
>>>>>>> before
>>>>>>> D2 turns gold? Seems to me it could break quite some code.
>>>>>>
>>>>>>  I'm hoping someone will come up with a design.
>>>>>>  Straw man:
>>>>>>  void toString(void delegate(const(char)[]) sink, string fmt) {
>>>>>>  // fmt holds the format string from writefln/formatln.
>>>>>> // call sink() to print partial results.
>>>>>>  }
>>>>>
>>>>> I think the best option for toString is to take an output range and
>>>>> write
>>>>> to it. (The sink is a simplified range.)
>>>>>
>>>>> Andrei
>>>>
>>>> It means toString() must be either a template, or accept an abstract
>>>> InputRange interface?
>>>
>>> It should take an interface.
>>
>> So yet another type in object.d?
>> Or require users in import something specific in every module that's
>> going to use toString?
>>
>> --bb
>
> I am not sure. Opinions as always are welcome.

That's why my opinion is that the delegate idea is nice.  :-)

But I guess toString is already defined by Object, right?  So it would
make sense for an interface needed by an Object method to be defined
in object.d.   I suppose it could be an interface defined inside the
Object class itself?  (Does that work? can you define interfaces
inside classes?)

--bb



More information about the Digitalmars-d mailing list