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

Какая разница между Object и BasicObject в Ruby?

Какая разница между этими классами? Какая разница между их целями?

4b9b3361

Ответ 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