From: MiG Date: 2005-10-19T22:28:29+09:00 Subject: Array.sort when it's items are String inheritors with redefined <=> works like if not redefined Hello, I want to have a string which, if in array, will be sorted like numbers. I wrote this: ----------------------------------------------------------------------------------------- class String2 < String def <=> str2 self.to_i <=> str2.to_i end end a = [ String2.new('1'), String2.new('10'), String2.new('5') ] puts a.sort.join(',') ----------------------------------------------------------------------------------------- It produces "1,10,5", but I expected "1,5,10" Then I wrote a class without String inheritance and it works. BUT: another strange thing happened: in `<=>': undefined method `to_i' for # (NoMethodError) to_i method, even if @a is a String, must be explicitely defined. Moreover "defined". What do you think about it? ----------------------------------------------------------------------------------------- class String2 def initialize a @a = a end def <=> b @a.is_a? String # >> true but.. @a.to_i <=> b.to_i # .. @a.to_i doesn't work if I don't define to_i method below end def to_i @a.to_i end def to_s @a end end a = [ String2.new('1'), String2.new('10'), String2.new('5') ] puts a.sort.join(',') ----------------------------------------------------------------------------------------- Thank you, jan molic