class << Awesomeness
Qu’est-ce que c’est <<
pour? J’ai cherché, mais les résultats ne me disent que sur la concaténation de cordes …
Bien qu’il soit vrai que class << something
est la syntaxe d'une classe singleton, comme quelqu'un d'autre l'a dit, elle est le plus souvent utilisée pour définir des méthodes de classe dans une définition de classe. Mais ces deux usages sont cohérents. Voici comment.
Ruby vous permet d'append des méthodes à une instance particulière en procédant comme suit:
class << someinstance def foo "Hello." end end
Cela ajoute une méthode foo
à certaines choses, pas à sa classe mais à cette instance particulière. (En fait, foo est ajouté à la classe "singleton" de l'instance, mais c'est plus ou moins une querelle d'implémentation.) Après l'exécution du code ci-dessus, vous pouvez envoyer la méthode foo à quelqu'un:
someinstance.foo => "Hello."
mais vous ne pouvez pas envoyer foo à d'autres instances de la même classe. C'est ce que <<
est nominalement pour. Mais les gens utilisent plus souvent cette fonctionnalité pour la gymnastique syntaxique comme ceci:
class Thing def do_something end class << self def foo puts "I am #{self}" end end end
Lorsque ce code - cette définition de classe - s'exécute, qu'est-ce que le self
? C'est la classe Thing
. Ce qui signifie que la class << self
est la même chose que de dire "append les méthodes suivantes à la classe Thing". C'est-à-dire que foo est une méthode de classe. Une fois ce qui précède terminé, vous pouvez le faire:
t = Thing.new t.do_something => does something t.class.foo => "I am Thing" t.foo => NoMethodError: undefined method `foo'
Et quand on pense à ce que <<
fait, tout est logique. C'est un moyen d'append à une instance particulière, et dans le cas commun, l'instance ajoutée à est une classe, de sorte que les méthodes du bloc deviennent des méthodes de classe.
En bref, c'est un moyen concis de créer des méthodes de classe dans un bloc de définition de classe. Une autre manière serait de faire ceci:
class Thing def self.foo # ... end end
Même chose. Votre exemple est en fait une erreur de syntaxe, mais si vous comprenez comment <<
est utilisé avec les instances et le mot-clé de classe, vous saurez comment le corriger.
<<
est la syntaxe de "Singleton class definition" . Voici un exemple où / comment il est "généralement" utilisé.
Dans a = "abc"; a << "xyz"
a = "abc"; a << "xyz"
c'est la syntaxe pour "append des données" (à la chaîne, au tableau, etc.)
Si vous voulez un inheritance (basé sur le titre de votre question), vous voulez un seul <
:
class Awesome < ParentAwesomeness
Le code que vous fournissez n'est pas valide ruby:
class Awesomeness end class Awesome << Awesomeness end SyntaxError: (irb):3: syntax error, unexpected tLSHFT, expecting '<' or ';' or '\n'