From: Brian Lindauer Date: 2011-07-16T12:43:52+09:00 Subject: [ruby-core:38094] [Ruby 1.9 - Bug #4517] ArgumentError when sorting array of objects Issue #4517 has been updated by Brian Lindauer. =begin I did some investigation into this. The following code does not trigger the error class Thing attr_accessor :value def initialize(value) @value = value end end stuff = [Thing.new("Fred"), Thing.new("Wilma"), Thing.new("Barney")] stuff.sort! {|a,b| a.value <=> b.value} Reading through the Ruby source, I discovered that the only way this particular error text could be printed (in (({rb_cmperr()}))) would be if there was a comparison involving a numeric value, not just string/string comparison. Then I tried modifying the input array above to include a numeric value. stuff = [Thing.new(4), Thing.new("Wilma"), Thing.new("Barney")] stuff.sort! {|a,b| a.value <=> b.value} This does, in fact, trigger the error. in `sort!': comparison of Thing with Thing failed (ArgumentError) I think the OP must have had a bug in his own code that resulted in a numeric-typed value in one of the instances of Thing. =end ---------------------------------------- Bug #4517: ArgumentError when sorting array of objects http://redmine.ruby-lang.org/issues/4517 Author: Milo Thurston Status: Feedback Priority: Normal Assignee: Category: Target version: ruby -v: 1.9.2p180 =begin I've got some Rails (v. 3.0.4) code wherein an array of objects (referred to as 'Thing' here) need to be sorted: stuff = array of Things stuff.sort! {|a,b| a.value <=> b.value } ���where value is a String. On Ruby 1.9.2p136 the array "stuff" is sorted successfully, but running the same code on 1.9.2p180 I get the following error: ArgumentError (comparison of Thing with Thing failed) I can reproduce the error in the console as well as when running the Rails application. Thanks for taking a look. =end -- http://redmine.ruby-lang.org