Ruby - удалить унаследованные методы
Можно ли удалить некоторые из унаследованных методов в Ruby? Я имею в виду, я могу переопределить его, но есть ли другой способ?
Class ABC
end
a = ABC.new
puts a.id
Здесь метод id
наследуется от Object
вместе с другими методами, такими как tap
, class
, type
и т.д. Я хочу удалить такие методы.
Изменить: Я использую Ruby 1.8.7
Ответы
Ответ 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