Quelle est la différence entre ces classes? Quelle est la différence entre leurs objectifs?
Réponse
Trop de publicités?BasicObject a été introduit en Ruby 1.9 et est le parent de Object (ainsi BasicObject
est la classe parent de toutes les classes en Ruby).
BasicObject
n'a presque aucune méthode en lui-même:
::new #! #!= #== #__id__ #__send__ #equal? #instance_eval #instance_exec
BasicObject peut être utilisé pour créer des hiérarchies d'objets indépendantes de la hiérarchie d'objets Ruby, des objets proxy comme la classe Delegator, ou d'autres utilisations où la pollution de l'espace de noms par les méthodes et classes de Ruby doit être évitée.
BasicObject n'inclut pas Kernel (pour des méthodes comme puts) et BasicObject est en dehors de l'espace de noms de la bibliothèque standard, donc les classes courantes ne seront pas trouvées sans utiliser un chemin de classe complet.
Object inclut le module Kernel, rendant les fonctions kernel intégrées globalement accessibles. Bien que les méthodes d'instance de Object soient définies par le module Kernel...
Vous pouvez utiliser BasicObject
comme parent de votre objet au cas où vous n'auriez pas besoin des méthodes de Object
et que vous voudriez les désapprendre autrement:
# lorsque vous héritez de Object
class Tracer
instance_methods.each do |m|
next if [:__id__, :__send__].include? m
undef_method m
end
# une certaine logique
end
# lorsque vous héritez de BasicObject
class Tracer < BasicObject
# une certaine logique