From: Han Holl Date: 2003-03-28T07:02:09+09:00 Subject: How to call super with different arguments Some code: class Awk < String include Comparable @@intpattern = /^\s*[-+]?\d+$/ @@casesensitive = false def self.casesensitive(val) @@casesensitive = val end def initialize(str) super(str.to_s) end def <=>(other) if @@intpattern =~ self && @@intpattern =~ other to_i <=> other.to_i else if @@casesensitive super else # What to use here ? String.new(downcase) <=> String.new(other.downcase) end end end def ==(other) (self <=> other) == 0 end end a = Awk.new('a') b = Awk.new('A') if a == b puts 'equal' end a = Awk.new('21') b = Awk.new('3') if a > b puts "OK" end The problem I'm having is in the case insensitive case: it's somehow asymmetrical: while to_i return an integer, to_s does _not_ return a String but an Awk (as does downcase). This means I can't use downcase <=> other.downcase as I's like to. Is it possible to use some variation of super ? The above construct works, but strikes me as expensive and clumsy. Han Holl