string concatenation

Justin Johansson no at spam.com
Wed Nov 18 21:49:29 PST 2009


Ellery Newcomer wrote:
> Andrei Alexandrescu wrote:
>> Ellery Newcomer wrote:
>>> Andrei Alexandrescu wrote:
>>>> TDPL boasts the code:
>>>>
>>>> void main()
>>>> {
>>>>   string a = "Hall\u00E5";
>>>>   wstring b = ", ";
>>>>   dstring c = "V\u00E4rld";
>>>>   auto d = b ~ c;           // d has type wstring, same as b
>>>>   a ~= d ~ '!';             // concatenate string with character
>>>>   writeln(a);
>>>> }
>>>>
>>>> We are having second thoughts about allowing b ~ c. It may be just a bit
>>>> too clever. Also, figuring out the result type is not a slam dunk. The
>>>> pro arguments are that strings are already supported by the compiler in
>>>> iteration, literals, and concatenation of a char[] with a dchar.
>>>>
>>>> What say you?
>>>>
>>>>
>>>> Andrei
>>> What are the current ideas on result type and why don't they dunk?
>> The result type would be the type of the left-hand side. This makes ~
>> consistent of sorts with ~=.
>>
> 
> That seems intuitive enough. Its what I would have guessed.
> 
>>> (personally, I like the idea of a syntax for converting from one unicode
>>> representation to another)
>> I don't think that's an option at the moment.
>>
>>
>> Andrei
> 
> I don't know what I ended up saying, but I meant
> 
> a = ""c ~ somewstring;
> 
> beats
> 
> a = std.utf.toString(somewstring);
> //no I'm not going to check if that's the right function
> 
> am I still missing something?

a = string( somewstring )

is much cleaner.

This an example of a constructor function.

Sadly, D does not support constructor functions (that I know of).

Justin Johansson



More information about the Digitalmars-d mailing list