В чем разница между этими классами? В чем разница между их целями?В чем разница между Object и BasicObject в Ruby?
ответ
BasicObject был введен в Ruby 1.9 и является родителем Object (таким образом, BasicObject
является родительским классом всех классов в Ruby).
BasicObject
практически нет методов на себе:
::new #! #!= #== #__id__ #__send__ #equal? #instance_eval #instance_exec
BasicObject может быть использован для создания иерархии объектов независимо от иерархии объектов в Ruby, прокси-объекты, как доверитель класс или другие виды использования, где загрязнение пространства имен из методов и классов Ruby .
BasicObject не включает в себя ядро (для методов, таких как путы) и BasicObject находится вне пространства имен стандартной библиотеки так общие классов не будут найдены без использования полного пути к классу.
Объект смеси в модуле ядра, что делает встроенный в ядро функции глобально доступной. Хотя методы экземпляра Объекта определяются модулем ядра ...
Вы можете использовать BasicObject
как родитель вашего объекта в случае, если вам не нужны методы Object
и вы бы в противном случае их отмены определения:
# when you inherit Object
class Tracer
instance_methods.each do |m|
next if [:__id__, :__send__].include? m
undef_method m
end
# some logic
end
# when you inherit BasicObject
class Tracer < BasicObject
# some logic
end
Документы отвечают на первую часть. BasicObject имеет меньшую функциональность и может использоваться вместо Object, если вы в конечном итоге удалите кучу методов объекта. –