2012-01-17 3 views
37

В чем разница между этими классами? В чем разница между их целями?В чем разница между Object и BasicObject в Ruby?

+1

Документы отвечают на первую часть. BasicObject имеет меньшую функциональность и может использоваться вместо Object, если вы в конечном итоге удалите кучу методов объекта. –

ответ

55

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 
Смежные вопросы