2011-06-16 5 views
2

J'ai deux questions:classes anonymes dans Ruby

  1. méthode ne f_1 appartient à la classe métaclasse anonyme?
  2. La méthode f_2 appartient-elle à la classe anonyme?

lié au code suivant:

car = "car" 

class << car 
    def self.f_1 
    puts "f_1" 
    end 
    def f_2 
    puts "f_2" 
    end 
end 

Répondre

1

Eh bien, la terminologie est cassante, mais FWIW je dirais que votre classe n'était pas vraiment une classe anonyme. Quant à l'appartenance, ces deux méthodes n'existent que dans l'objet voiture. Je vais être honnête et admettre que je suis un peu vague sur la différence entre une méthode de classe et une méthode d'instance lorsque la classe est définie par rapport à un objet individuel comme celui-ci - je suppose que s'il y en a différence, ce sera un obscur qui rendra votre code beaucoup plus difficile à lire;)

Mise à jour: Vous pourriez trouver this utile, si vous ne l'avez pas vu auparavant. (Personnellement, il me fait mal à la tête, mais tout le monde est différent ...)

4

Depuis propre API Ruby utilise le terme « singleton class, » Je dirais que les conditions suivantes sont remplies:

  1. f_1 est un méthode de classe sur la classe singleton de voiture et peut être appelé comme ceci:

    car.singleton_class.f_1 
    
  2. f_2 est une méthode d'instance sur la classe singleton de voiture et peut être appelé comme ceci:

    car.f_2 
    
0

J'avais l'impression qu'une classe anonyme est une classe qui n'a pas de nom:

my_class = Class.new 
my_class.name # => nil 

Cependant, la Pioche se réfère à elle comme une classe sans nom plutôt que comme une classe anonyme .

+1

Si vous créez une classe et lui assignez une constante My_slass, elle aura un nom. – user413881

0

Une reformulation de la réponse de Rob Davis:

  1. La méthode propriétaire de :f_1 est car.singleton_class.singleton_class.
  2. Le propriétaire de la méthode :f_2 est car.singleton_class.

La chaîne carcar.singleton_classcar.singleton_class.singleton_class correspond à la ligne inférieure du diagramme à http://www.atalon.cz/rb-om/ruby-object-model/#sc-inheritance-sample.

Notes:

Questions connexes