class << Awesomeness
Qu'est-ce que c' <<
? J'ai cherché, mais les résultats ne me dites à propos de la concaténation de chaîne...
class << Awesomeness
Qu'est-ce que c' <<
? J'ai cherché, mais les résultats ne me dites à propos de la concaténation de chaîne...
C'est vrai qu' class << something
est la syntaxe pour une classe singleton, comme quelqu'un d'autre a dit, c'est le plus souvent utilisé pour définir les méthodes de la classe dans une définition de classe. Mais ces deux utilisations sont compatibles. Voici comment.
Ruby vous permet d'ajouter des méthodes à une quelconque instance en faisant ceci:
class << someinstance
def foo
"Hello."
end
end
Cela ajoute une méthode foo
de someinstance, pas à sa classe, mais à une instance particulière. (En fait, foo est ajouté à l'instance de la "classe singleton," mais c'est plus ou moins une mise en œuvre caprice.) Après le code ci-dessus s'exécute, vous pouvez envoyer la méthode foo à someinstance:
someinstance.foo => "Hello."
mais vous ne pouvez pas envoyer de foo à d'autres instances de la même classe. C'est ce qu' <<
est nominalement. Mais les gens on tendance à utiliser cette fonctionnalité pour syntaxiques de la gymnastique comme ceci:
class Thing
def do_something
end
class << self
def foo
puts "I am #{self}"
end
end
end
Lorsque ce code -- la définition de cette classe -- exécute, qu'est - self
? C'est la classe Thing
. Ce qui signifie class << self
est la même chose que de dire "ajoutez les méthodes suivantes de la classe de Chose." C'est, foo est une méthode de classe. Après 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 vous pensez à ce qui <<
est en train de faire, tout fait sens. C'est une façon d'ajouter à une instance particulière, et dans la plupart des cas, l'instance étant annexée est une classe, de sorte que les méthodes à l'intérieur du bloc de devenir les méthodes de la classe.
En bref, c'est un laconique de façon à créer des méthodes de la classe au sein d'une classe de définition de bloc. Une autre solution serait de faire:
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é class, vous saurez comment le corriger.
<<
est la syntaxe pour "Singleton définition de la classe". Voici un exemple d'où/comment il est "généralement".
En a = "abc"; a << "xyz"
c'est la syntaxe pour "ajouter des données" (string, array, etc.)
Si vous voulez héritage (en fonction de votre question titre), vous voulez qu'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'
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.