I am trying to redefine the Ruby <=> operator (spaceship) for sorting apples and oranges, so that apples are sorted by weight first, and oranges are the second sorted by sweetness. For instance:
module Fruity attr_accessor :weight, :sweetness def <=>(other) # use Array#<=> to compare the attributes [self.weight, self.sweetness] <=> [other.weight, other.sweetness] end include Comparable end class Apple include Fruity def initialize(w) self.weight = w end end class Orange include Fruity def initialize(s) self.sweetness = s end end fruits = [Apple.new(2),Orange.new(4),Apple.new(6),Orange.new(9),Apple.new(1),Orange.new(22)] p fruits #should work? p fruits.sort
But this does not work, can someone say what I am doing wrong here, or is there a better way to do this?
source share