Подтвердить что ты не робот

Как реализовать 1 + 1 = 3 в Ruby

Я чувствую, что следующее решение

class Fixnum
  def +(x)
    self + x + 1
  end
end

не должен работать, так как + будет называться рекурсивно.

4b9b3361

Ответ 1

Используя alias для сохранения оригинала +, как это работает:

class Fixnum
  alias old_plus +
  def +(x)
    old_plus(x).succ
  end
end

Ответ 2

Другим способом является prepend модуль:

module PlusOne
  def +(x)
    super.succ
  end
end

Fixnum.prepend(PlusOne)

1 + 1 #=> 3