Quelle est la différence entre Object et BasicObject dans Ruby?

Quelle est la différence entre ces classes? Quelle est la différence entre leurs objectives?

BasicObject a été introduit dans Ruby 1.9 et est un parent de Object ( BasicObject est donc la classe parente de toutes les classes de Ruby).

BasicObject n’a presque aucune méthode sur lui-même:

 ::new #! #!= #== #__id__ #__send__ #equal? #instance_eval #instance_exec 

BasicObject peut être utilisé pour créer des hiérarchies d’objects indépendantes de la hiérarchie des objects de Ruby, des objects proxy tels que la classe Delegator ou d’autres utilisations où la pollution de l’espace de noms par les méthodes et les classes de Ruby doit être évitée.

BasicObject n’inclut pas Kernel (pour les méthodes telles que les méthodes put) et BasicObject est en dehors de l’espace de noms de la bibliothèque standard. Ainsi, les classes communes ne seront pas trouvées sans l’utilisation d’un chemin de classe complet.


L’object se mélange au module du kernel, rendant les fonctions du kernel intégrées accessibles globalement. Bien que les méthodes d’instance d’Object soient définies par le module du kernel …

Vous pouvez utiliser BasicObject tant que parent de votre object si vous n’avez pas besoin des méthodes de Object et si vous ne les définissez pas autrement:

 # 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