Quelle est la différence entre les méthodes de classe et de type dans Ruby? J'ai remarqué que ce type fonctionne pour trouver le type de certaines classes mais pas d'autres.class() vs type() dans Ruby
Répondre
La principale différence est que Object#type
est dépréciée. À partir du RDoc pour le type d'objet #:
Le synonyme obsolète de la classe Object #.
Voici pourquoi vous devez utiliser Object#class
:
Renvoie la classe de obj, maintenant préféré sur l'objet # type, comme le type d'objet en Ruby est seulement vaguement lié à cet objet la classe. Cette méthode doit toujours être appelée avec un récepteur explicite , car la classe est également un mot réservé dans Ruby.
En réalité, vous souhaitez probablement utiliser Object#respond_to?
au lieu de vérifier la classe d'un objet dans la plupart des cas.
#type
est un synonyme de #class
, mais il est déprécié en rubis 1.8, et apparemment disparu de ruby 1.9. Il suffit d'utiliser #class
partout.
# For ruby 1.8 $ ri Object#type ------------------------------------------------------------ Object#type obj.type => class ------------------------------------------------------------------------ Deprecated synonym for Object#class. # For ruby 1.9 $ ri1.9 Object#type Nothing known about Object#type
Si c'est un synonyme, pourquoi aurais-je une erreur de méthode non définie quand j'appelle type sur un cours que j'ai défini? Mais la même chose n'arrive pas quand j'appelle la méthode de classe pour la même classe. Une erreur de méthode non définie ne ressemble pas à ce que vous obtiendriez pour une méthode obsolète. –
Êtes-vous sur ruby 1.9? Sur ruby 1.8 je ne reçois pas d'erreur, juste un avertissement sur la dépréciation. – kch
Et si vous êtes sur ruby 1.9, eh bien, dépréciation signifie qu'il sera supprimé quand, et ressemble à 1.9 est ce quand. – kch
- 1. Nullable struct vs class
- 2. Ruby Custom Class au modèle
- 3. Java Class Type
- 4. fonctions Ruby vs méthodes
- 5. p vs met en Ruby
- 6. Ruby: ProC# appel vs rendement
- 7. Ruby on Rails vs Django
- 8. Type de sécurité: Coulée incontrôlée entre Class-Objects
- 9. classe File vs FileUtils Rails Ruby
- 10. Dans Ruby, existe-t-il des applications connexes de la syntaxe: class << self ... end
- 11. Ruby on Rails: errors.add_to_base vs errors.add
- 12. Existe-t-il un moyen d'appeler une méthode Class privée à partir d'une instance dans Ruby?
- 13. instance variable vs symbole en ruby sur rails (form_for)
- 14. Aide Ping Class SendAsync
- 15. Comment faire pour afficher le type d'erreur dans ruby?
- 16. EJB Factory Class
- 17. KnowledgeSyncProvider class
- 18. C++ Exception Class Design
- 19. Java Class Path
- 20. Singleton vs Static Class pour exposer les données lues à partir de xml
- 21. Class Dictionary dans java (structure de données)
- 22. groovy static class
- 23. PHP Class Scope
- 24. PHP Class for logins
- 25. Rails ne peut pas trouver le modèle avec le même nom que Ruby class
- 26. ActionScript Object (Class?) Syntaxe
- 27. Crystal Reports Css Class
- 28. .NET Class Refactoring Dilemma
- 29. Quelle est la différence entre new Some :: Class et Some :: Class-> new() dans Perl?
- 30. Pourquoi devrais-je vérifier [self class] == [LevelAppDelegate class] dans une méthode d'initialisation?
Si c'est un synonyme, pourquoi aurais-je une erreur de méthode non définie quand j'appelle type sur un cours que j'ai défini moi-même? Mais la même chose n'arrive pas quand j'appelle la méthode de classe pour la même classe. Une erreur de méthode non définie ne ressemble pas à ce que vous obtiendriez pour une méthode obsolète. –
@Chris Collins je suppose que le doc est éteint, et que ce n'est pas un synonyme strict. Le point reste que le type d'objet est une méthode sans utilisation. – runako
Pourquoi utiliser respond_to? –