Aleksi Niemelwrote: > ... > $ ruby -v -e'a=[1,2,3]; a[1,0]=a; p a;' > ruby 1.6.2 (2000-10-16) [i686-linux] > [1, 1, 1, 1, 1, 1] > > I guess it's not as it should be. I'd expect [1, 1,2,3, 2,3]. > Yes, either that or an infinite set of 1's, since 'a' is growing as it gets inserted... I tried something related: irb(main):021:0> b [1, 2, 3] irb(main):022:0> b[-1,0]=b [1, 2, 1, 2, 1, 2] /usr/local/lib/ruby/1.6.0/irb/main.rb:461:in `gsub!': failed to allocate memory (fatal) from /usr/local/lib/ruby/1.6.0/irb/main.rb:461:in `prompt' from /usr/local/lib/ruby/1.6.0/irb/main.rb:341:in `eval_input' from /usr/local/lib/ruby/1.6.0/irb/main.rb:331:in `call' from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:193:in `prompt' from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:234:in `each_top_level_statement' from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:215:in `loop' from /usr/local/lib/ruby/1.6.0/irb/ruby-lex.rb:215:in `each_top_level_statement' from /usr/local/lib/ruby/1.6.0/irb/main.rb:352:in `eval_input' from /usr/local/lib/ruby/1.6.0/irb/main.rb:62:in `start' from /usr/local/lib/ruby/1.6.0/irb/main.rb:61:in `catch' from /usr/local/lib/ruby/1.6.0/irb/main.rb:61:in `start' from /usr/local/bin/irb:19 There definitely is a problem here. ;-) > ... > Then I bumped into the problem. Backwards compatibility. I got scared. > Messing around with [] surely causes many programs to fail. Maybe [] should not be an alias, but have its own defined set of operations? That could eliminate these side effects, and the dichotomy resulting from comparisons to things like substr() etc. I'm not sure this would be a simple task, though. I have not looked in depth, but it seems like it may be deeply connected to many things... > So I'm asking: > > 1) Do you think we should change the way Array#[pos, len] version > works for next Ruby version? > > - remove surprising array[pos, 0] = [1,2,3] array flattening > - change semantics for negative pos > Yes. I guess that means we have to consider supporting array[pos,0] = 1,2,3 (or some other way to force flattening) > 2) Do you think Array#insert(pos, stuff) should work almost like > current Array#[pos, 0] = stuff except it doesn't autoflat? > Or do you think negative pos too should be handled differently > from Array#[pos,len]= ? > I think negative pos ought to be handled differently than it is now. In other words, if a=[1,2,3], then a[-1,0] = 4 should result in [1,2,3,4], not [1,2,4,3]. Likewise for a.insert(-1,stuff). Guy N. Hurst -- HurstLinks Web Development http://www.hurstlinks.com/ Norfolk, VA - (757)623-9688 PHP/MySQL - Ruby/Perl - HTML/Javascript