web-dev-qa-db-fra.com

class () vs type () in Ruby

Quelle est la différence entre les méthodes de classe et de type dans Ruby? J'ai remarqué que le type fonctionne pour trouver le type de certaines classes mais pas d'autres.

41
Chris Collins

La principale différence est que Object#type est obsolète. A partir du RDoc pour le type d'objet #:

Synonyme obsolète pour la classe Object #.

Voici pourquoi vous devez utiliser Object#class:

Renvoie la classe d'obj, désormais préférée au type Object #, en tant que type d'objet dans Ruby n'est lié que de manière lâche à la classe de cet objet. Cette méthode doit toujours être appelée avec un récepteur, car la classe est également un mot réservé en Ruby.

En réalité, vous voudrez probablement utiliser Object#respond_to? au lieu de vérifier la classe d'un objet dans la plupart des cas.

48
runako

#type est synonyme de #class, mais il est déconseillé dans Ruby 1.8, et semble être passé de Ruby 1.9. Utilisez simplement #class partout.

 
 # Pour Ruby 1,8 
 
 $ Ri Type d'objet #. 
 ------- -------------------------------------------------- --- Objet # type 
 Obj.type => classe 
 ---------------------------- -------------------------------------------- 
 Obsolète synonyme de classe Object #. 
 
 
 # Pour Ruby 1.9 
 
 $ ri1.9 Object # type 
 Rien de connu sur l'objet # type 
15
kch