45 votes

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

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

65voto

Alex Kliuchnikau Points 8411

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X