From: John Carter Date: 2005-01-17T10:51:30+09:00 Subject: Bug in ri - cannot convert nil into Array There seems to be a Bug in "ri" in the CVS-Latest (17-Jan-2005) version of Ruby. ri Set | cat /usr/local/lib/ruby/1.9/rdoc/ri/ri_descriptions.rb:99:in `concat': cannot convert nil into Array (TypeError) from /usr/local/lib/ruby/1.9/rdoc/ri/ri_descriptions.rb:99:in `merge_in' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_reader.rb:56:in `get_class' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_reader.rb:52:in `each' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_reader.rb:52:in `get_class' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_reader.rb:31:in `find_class_by_name' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_display.rb:97:in `display_class_info' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_display.rb:96:in `each' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_display.rb:96:in `display_class_info' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_display.rb:77:in `page' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_display.rb:77:in `display_class_info' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_driver.rb:71:in `report_class_stuff' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_driver.rb:106:in `get_info_for' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_driver.rb:135:in `process_args' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_driver.rb:134:in `each' from /usr/local/lib/ruby/1.9/rdoc/ri/ri_driver.rb:134:in `process_args' from /usr/local/bin/ri:48 ------------------------------------------------------------- Class: Set Set implements a collection of unordered values with no duplicates. This is a hybrid of Array's intuitive inter-operation facilities and Hash's fast lookup. Several methods accept any Enumerable object (implementing +each+) for greater flexibility: new, replace, merge, subtract, |, &, -, ^. The equality of each couple of elements is determined according to Object#eql? and Object#hash, since Set uses Hash as storage. Finally, if you are using class Set, you can also use Enumerable#to_set for convenience. Example ------- require 'set' s1 = Set.new [1, 2] # -> # s2 = [1, 2].to_set # -> # s1 == s2 # -> true s1.add("foo") # -> # s1.merge([2, 6]) # -> # s1.subset? s2 # -> false s2.subset? s1 # -> true ------------------------------------------------------------------------ Includes: --------- ==================================================================== If I have a look at /usr/local/lib/ruby/1.9/rdoc/ri/ri_descriptions.rb:99, I see... # merge in another class desscription into this one def merge_in(old) merge(@class_methods, old.class_methods) merge(@instance_methods, old.instance_methods) merge(@attributes, old.attributes) merge(@constants, old.constants) merge(@includes, old.includes) if @comment.nil? || @comment.empty? @comment = old.comment else @comment << SM::Flow::RULE.new @comment.concat old.comment end end Where line 99 is... @comment.concat old.comment I take it then "old.comment" is nil Give me a yell if you want me to doing any testing / instrumenting of this for you. John Carter Phone : (64)(3) 358 6639 Tait Electronics Fax : (64)(3) 359 4632 PO Box 1645 Christchurch Email : john.carter@tait.co.nz New Zealand "The notes I handle no better than many pianists. But the pauses between the notes - ah, that is where the art resides!' - Artur Schnabel