Какая разница между этими классами? Какая разница между их целями?
Какая разница между Object и BasicObject в Ruby?
Ответ 1
BasicObject был введен в Ruby 1.9 и является родителем Object (таким образом BasicObject
является родительским классом всех классов в Ruby).
BasicObject
не имеет практически никаких методов:
::new #! #!= #== #__id__ #__send__ #equal? #instance_eval #instance_exec
BasicObject может использоваться для создания иерархии объектов независимо от Иерархия объектов Ruby, объекты-прокси, такие как класс Delegator, или другое использование, где загрязнение пространства имен из методов и классов Ruby следует избегать.
BasicObject не включает ядро (для таких методов, как puts) и BasicObject находится за пределами пространства имен стандартной библиотеки, поэтому общие классы не будут найдены без использования полного пути класса.
Объект смешивается в модуле Kernel, делая встроенное ядро функции доступны по всему миру. Хотя методы экземпляра объекта определяются модулем ядра...
Вы можете использовать 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