Isn't it a red herring to say that strings lack setindex because they are immutable? I think strings don't have setindex! because it is considered to be a bad API choice, at least partially because you can't do O(1) indexing for many string encodings.
I can easily define a setindex! method* that does what the OP is expecting, so how can this be related to strings being immutable? *julia> **Base.setindex!(s::ASCIIString, v,i) = s.data[i]=v* *setindex! (generic function with 58 methods)* *julia> **a="abc"* *"abc"* *julia> **a[1]='7';a* *"7bc"* *julia> **a[1]+=1;a* *"8bc"* *This works in 0.4, and I'm lead to believe this is considered a bad idea. On Wednesday, August 17, 2016 at 12:40:36 AM UTC-6, Jacob Quinn wrote: > > Strings are immutable (similar to other languages). There are several > different ways to get what you want, but I tend to utilize IOBuffer a lot: > > a = "abcd" > io = IOBuffer() > > for char in a > write(io, a + 1) > end > > println(takebuf_string(io)) > > -Jacob > > On Wed, Aug 17, 2016 at 12:30 AM, Rishabh Raghunath <[email protected] > <javascript:>> wrote: > >> >> Hello fellow Julia Users!! >> >> How do you manipulate the individual characters comprising a string in >> Julia using a for loop ? >> For example: >> ################### >> >> a = "abcd" >> >> for i in length(a) >> a[i]+=1 >> end >> >> print(a) >> >> #################### >> I am expecting to get my EXPECTED OUTPUT as " bcde " >> >> BUT I get the following error: >> ########################################## >> >> ERROR: MethodError: `setindex!` has no method matching >> setindex!(::ASCIIString, ::Char, ::Int64) >> [inlined code] from ./none:2 >> in anonymous at ./no file:4294967295 >> >> ########################################## >> I also tried using: >> >> for i in eachindex(a) instead of the for loop in the above program .. And >> I get the same error.. >> >> Please tell me what i should do to get my desired output .. >> Please respond ASAP.. >> Thanks.. >> > >
