Как переопределить метод Ruby +? - PullRequest
0 голосов
/ 29 сентября 2018

Просто для учебы я пытаюсь переопределить метод Ruby +, но не получаю желаемого результата.

class Integer
  def +(my_num)
    "Plus method overridden"
  end
end

puts 5.+(9)

Пожалуйста, дайте мне знать, что я делаю здесь неправильно.

Ответы [ 2 ]

0 голосов
/ 29 сентября 2018

Спецификация Ruby Language позволяет Integer иметь подклассы, специфичные для реализации.См. Раздел 15.2.8.1, строки 27-33.

Похоже, что ваша реализация имеет такие подклассы.В этом случае метод + может быть переопределен в подклассе.

Мое лучшее предположение состоит в том, что у вас есть реализация, которая различает Fixnum s и Bignum s, и что наш Integer#+переопределяется на Fixnum#+.

Кстати, даже если бы то, что вы пытались сделать, работало, это не было бы переопределением , это было бы перезаписью .

Также обратите внимание, что если бы то, что вы пытались сделать, работало, вы, скорее всего, сломали бы ваш процесс Ruby, поскольку Integer s являются фундаментальными и широко используются повсеместно в Ruby.

0 голосов
/ 29 сентября 2018

Кажется, вы используете ruby ​​<2.4.Если это так, вы хотите исправить <code>Fixnum, а не Integer.Будьте осторожны, так как сама система использует цифры.

class Fixnum
  alias_method :add, :+

  def +(other)
    puts 'plus method overridden'
    add(other)
  end
end

puts 5 + 9
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...