From: Simon Harrison Date: 2011-01-15T23:10:00+09:00 Subject: Re: Retrieving and copying element from array That works great, thanks Josh. A couple of questions if you don't mind. 1. What is the purpose of the [] in line below? Does it mean collect whatever matches into an array? categories << [ line.sub(/^category: /,'').chomp ] 2. I've tried to achieve the same result using an existing array, rather than reading from the file and I'm stuck. I'm using JRuby 1.6RC1 and getting this error about NilClass. Any ideas? irb(main):038:0> arr2 = [] irb(main):039:0> arr => [["cat1", "1", "2", "3"], ["cat2", "1", "2"], ["cat3", "1", "2"]] irb(main):040:0> arr.map do |item| irb(main):041:1* if item =~ /^cat/ irb(main):042:2> arr2 << [ item ] irb(main):043:2> else irb(main):044:2* arr2.last << item irb(main):045:2> end irb(main):046:1> end NoMethodError: undefined method `<<' for nil:NilClass from (irb):44:in `evaluate' from org/jruby/RubyArray.java:2460:in `collect' from (irb):40:in `evaluate' from org/jruby/RubyKernel.java:1091:in `eval' from /opt/jruby/lib/ruby/1.8/irb.rb:158:in `eval_input' from /opt/jruby/lib/ruby/1.8/irb.rb:271:in `signal_status' from /opt/jruby/lib/ruby/1.8/irb.rb:270:in `signal_status' from /opt/jruby/lib/ruby/1.8/irb.rb:155:in `eval_input' from org/jruby/RubyKernel.java:1421:in `loop' from org/jruby/RubyKernel.java:1194:in `rbCatch' from /opt/jruby/lib/ruby/1.8/irb.rb:154:in `eval_input' from /opt/jruby/lib/ruby/1.8/irb.rb:71:in `start' from org/jruby/RubyKernel.java:1194:in `rbCatch' from /opt/jruby/lib/ruby/1.8/irb.rb:70:in `start' irb(main):047:0> arr => [["cat1", "1", "2", "3"], ["cat2", "1", "2"], ["cat3", "1", "2"]] irb(main):048:0> arr2 => [] irb(main):049:0> arr2.empty? => true irb(main):052:0> arr.each do |item| irb(main):053:1* if item =~ /^cat/ irb(main):054:2> arr2 << item irb(main):055:2> else irb(main):056:2* arr2.last << item irb(main):057:2> end irb(main):058:1> end NoMethodError: undefined method `<<' for nil:NilClass from (irb):56:in `evaluate' from org/jruby/RubyArray.java:1671:in `each' from (irb):52:in `evaluate' from org/jruby/RubyKernel.java:1091:in `eval' from /opt/jruby/lib/ruby/1.8/irb.rb:158:in `eval_input' from /opt/jruby/lib/ruby/1.8/irb.rb:271:in `signal_status' from /opt/jruby/lib/ruby/1.8/irb.rb:270:in `signal_status' from /opt/jruby/lib/ruby/1.8/irb.rb:155:in `eval_input' from org/jruby/RubyKernel.java:1421:in `loop' from org/jruby/RubyKernel.java:1194:in `rbCatch' from /opt/jruby/lib/ruby/1.8/irb.rb:154:in `eval_input' from /opt/jruby/lib/ruby/1.8/irb.rb:71:in `start' from org/jruby/RubyKernel.java:1194:in `rbCatch' from /opt/jruby/lib/ruby/1.8/irb.rb:70:in `start' irb(main):059:0> -- Posted via http://www.ruby-forum.com/.