Search code examples
rubysuperrubiniusyarv

How can I redefine Fixnum's + (plus) method in Ruby and keep original + functionality?


This throws me a SystemStackError in 1.9.2 Ruby (but works in Rubinius):

class Fixnum
  def +(other)
   self + other * 2
  end
end

but there is no super for + (based on other errors).

How can I access the original + functionality?


Solution

  • Use alias_method. Alias Fixnum's + to something else, then refer to it in the new +:

    class Fixnum
      alias_method :old_add, :+
      def +(other)
        self.old_add(other) * 2
      end
    end