J'ai un journal de texte d'un jeu avec (par exemple) deux types d'entrées à savoir. Chat et événement. Pour la plupart, ils sont très similaires, donc j'ai une classe LogEntry définie comme telle; LogChat et LogEvent étendent LogEntry et effectuent un traitement supplémentaire en rapport avec leur domaine. Tout fonctionne comme prévu;self = Descendant dans Ruby?
chat = LogEntry.new("some chat")
event = LogEntry.new("some event")
chat.parse.class # => LogChat
event.parse.class # => LogEvent
Question: La méthode de classe LogEntry.parse renvoie essentiellement une entrée analysable de la classe appropriée. Dans ce contexte, l'entrée analysée est le bit important. Mais nous pourrions renommer la méthode d'instance 'parse' en 'what_type_should_i_be?'. Je veux que l'objet agisse sur cette information et que 'self.become LogEntry.parse (self)'
Maintenant, pour analyser une entrée, je dois le faire; Je veux pousser plus loin afin que j'obtienne le même résultat avec;
entry.parse
J'ai essayé l'évidence; J'ai l'erreur Can't change the value of self
. Est-ce que quelqu'un sait comment je devrais y arriver?
Éditer: J'ai changé mes exemples parce que de nombreuses réponses se concentraient sur l'itération sur de nombreuses entrées. La réponse de Chuck montre élégamment que cette situation n'est pas un problème.
Dans le cas où cela susciterait l'intérêt de quelqu'un, j'ai trébuché sur Evil Ruby qui vous permet de vous mêler de `self.class '. Il y a un joli article d'Orielly à ce sujet qui s'appelle Ruby code that will swallow your soul! Je suis en train de regarder pour voir s'il offre des réponses. (Edit: evil.rb est bien nommé! Quelque chose de bas niveau ne semble pas approprié pour une distribution stable/à long terme.)
+1 pour commencer un intéressant train de pensées. Je vais voir si je peux implémenter ceci dans la méthode 'parse'. Je voudrais que l'objet se regarde et dise "en fait, je suis sur ces types d'objets." – deau
Pensez-vous que je fais des choses étranges à moi-même? Théoriquement, est-il dangereux d'avoir un objet qui se contrôle de cette manière? – deau
Eh bien, il est techniquement impossible de se définir soi-même sans un piratage de très bas niveau, ce que je voulais dire par "faire des trucs bizarres à soi-même". Un objet ne peut pas changer sa propre identité (même si vous pouviez définir 'self' dans une méthode, cela ne changerait pas l'identité de l'objet en dehors de la méthode - les variables ne sont que des références). Un objet ne peut contrôler que son état interne, c'est pourquoi j'ai recommandé de représenter la chose qui peut changer de cette façon. – Chuck