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

Ruby - удалить унаследованные методы

Можно ли удалить некоторые из унаследованных методов в Ruby? Я имею в виду, я могу переопределить его, но есть ли другой способ?

Class ABC
end

a = ABC.new

puts a.id

Здесь метод id наследуется от Object вместе с другими методами, такими как tap, class, type и т.д. Я хочу удалить такие методы.

Изменить: Я использую Ruby 1.8.7

4b9b3361

Ответ 1

Да - undef_method :foo предотвратит любые вызовы метода foo (в отличие от remove_method :foo, который удаляет метод из дочернего элемента, но все же проходит через цепочку наследования).

Еще раз, почему вы хотите удалить такие вещи, как id?

Ответ 2

Вы всегда можете создать чистый класс сланца для вывода из:

class BlankSlate
  instance_methods.each do |m|
    undef_method(m) unless (m.match(/^__/))
  end
end

Это должно исключать все методы, кроме внутренних, с которыми вам не нужно связываться, например __send__.

Ответ 3

Как сказал tadman, вы можете создать объект BlankSlate, или в ruby ​​1.9, есть класс BasicObject, который имеет минимум минимальных методов. Быстрый поиск в Google показал это для дальнейшего чтения: http://www.humbug.in/docs/ruby-best-practices/I_sect13_d1e2654.html

Похоже, что Rails уже имеет встроенный BlankSlate: http://rubydoc.info/docs/rails/2.3.8/BlankSlate