Is std.array.replace supposed to work with char[]?

Lars T. Kyllingstad public at kyllingen.NOSPAMnet
Mon Feb 21 02:09:59 PST 2011


On Sun, 20 Feb 2011 15:23:29 -0500, Steven Schveighoffer wrote:

> On Sun, 20 Feb 2011 14:51:10 -0500, bearophile
> <bearophileHUGS at lycos.com> wrote:
> 
>> Jacob Carlborg:
>>
>>> Every time I try to use D2 it's just a PITA to use. I've used D1 and
>>> Tango for
>>> several years and had no problem with that.
>>
>> I use this thread to ask regarding one specific little problem I have
>> with strings. I want to generate a random string of AB using the array,
>> map, etc, this looks like a possible implementation (in std.random
>> there is no choice() function yet):
>>
>>
>> import std.stdio, std.random, std.string, std.algorithm, std.range;
>> void main() {
>>     auto m = map!((i){ return "AB"[uniform(0,2)]; })(iota(10)); string
>>     s = join(array(m));
>>     writeln(s);
>> }
>>
>>
>> It gives this error:
>> ...\dmd\src\phobos\std\array.d(62): Error: result[i] isn't mutable
>> test.d(5): Error: template instance
>> std.array.array!(Map!(__dgliteral1,Iota!(int,uint))) error
>> instantiating
>>
>> What's the right way to write it in D?
>>
>> The same code in Python2.x:
>>
>> from random import choice
>> s = "".join(choice("AB") for _ in xrange(10)) print s
> 
> Just a blind guess, I have not tested, but maybe it's because the
> compiler is using const(char) as the return type for your delegate
> literal since you never specify one?

It's probably using immutable(char) since that's the element type of "AB".

-Lars


More information about the Digitalmars-d-learn mailing list