Je suis nouveau sur Ruby 1.9 et je suis assez dérouté par certains de ces newish des classes et des modules.
Une liste de Ruby 1.8.7 des classes et des modules est ici. Tous ces éléments sont parfaitement raisonnable. Je peux étudier dans la cisr 1.8.7, par exemple:
>> Data.class
=> Class
>> Kernel.class
=> Module
>> NameError.class
=> Class
Ils sont de toutes les classes et de modules.
Ensuite, nous allons à la documentation de Ruby 1.9.3 classes et de modules, trouvé ici. Maintenant, nous voyons quelques nouvelles entrées, dont l'une est ARGF. Vraiment?!
En Ruby 1.8.7, ARGF n'est pas une classe ou d'un module:
>> ARGF.class
=> Object
Mais en Ruby 1.9.3, je vois ceci:
>> ARGF.class
=> ARGF.class
>> ARGF.superclass
NoMethodError: undefined method `superclass' for ARGF:ARGF.class
from (irb):3
from /usr/local/bin/irb:12:in `<main>'
>> ARGF.class.superclass
=> Object
Donc, ce que cela me dit que
- La documentation dit que
ARGF
est une classe, mais il n'est pas vraiment une classe. - La classe de l'
ARGF
objet est -ARGF.class
ou en quelque sorte la classe de cet objet est une classe qui se trouve être une propriété de l'objet (?!)
Qu'est-ce que l'explication ici? Est-il une métaclasse ici? Une classe virtuelle? Classe Singleton? Quelque chose d'autre? Pourquoi la documentation de maintenant, placez ARGF comme une classe lorsque la classe est quelque chose d'autre? Ou est-ce la même chose? Qu'est-ce exactement a été modifié à la 1.9? Je soupçonne que la nouvelle façon est censé pour faire plus de sens, mais jusqu'à présent, pour moi, cette situation est très loin de mon "moindre surprise".