From: Guillaume Marcais Date: 2004-08-06T05:39:10+09:00 Subject: Array#delete return value According to the following contrived example (and the documentation), Array#delete returns the object passed as argument if a match is found and deleted: [gus@comp tmp]$ cat delete.rb Toto = Struct.new("Toto", :a, :b) class Toto; def ==(t); a == t.a; end; end t1 = Toto.new(1, 2) t2 = Toto.new(1, 3) p t1 == t2 a = [t1] p t1.id p t2.id p a.delete(t2).id [gus@comp tmp]$ ruby delete.rb true 578438406 578438356 578438356 It seems to me it would make more sense to return the object actually removed from the array (t1 in the example instead of t2). The behavior I would expect is as follow: [gus@comp tmp]$ cat delete2.rb class Array def delete2(o) i = index(o) return nil if i.nil? delete_at(i) end end Toto = Struct.new("Toto", :a, :b) class Toto; def ==(t); a == t.a; end; end t1 = Toto.new(1, 2) t2 = Toto.new(1, 3) p t1 == t2 a = [t1] p t1.id p t2.id p a.delete2(t2).id [gus@comp tmp]$ ruby delete2.rb true 663778146 663778096 663778146 Any thoughts on the matter. Guillaume.