L'extrait de code suivant fonctionne bien en 1.8.7 sur Mac OS X, mais pas en 1.8.6 sur Ubuntu. Pourquoi? Y a-t-il une solution de contournement?
fonctionne dans 1.8.7: p> mais pas dans 1.8.6: p> Pourquoi y a-t-il une différence? Quelle est la solution de contournement pour 1.8.6? P> p>
4 Réponses :
dans les méthodes d'itérateur de 1.8.7+ telles que fois code> renvoie un énumérateur si elles sont appelées sans bloc. Dans 1.8.6, vous devez faire
require 'enumerator'
6.enum_for(:times).map {...}
Vous pouvez maintenant nécessiter uniquement les backports dont vous avez besoin. Dans ce cas ... nécessite 'BackPorts / 1.8.7 / Entier / Times' Code>
Parce que 1.8.6 #time rendement sur le bloc donné, tandis que 1.8.7 renvoie un objet d'énumérateur, vous pouvez conserver et mettre en œuvre énumérable. P>
Dans Ruby 1.9, la bibliothèque a été modifiée afin que les fonctions qui ont fait l'itération renvoiaient un objet d'énumérateur si elles étaient appelées sans bloc. Une multitude d'autres caractéristiques linguistiques a également été modifiée et il a été largement connu que la compatibilité serait brisée entre Ruby 1.8.x et Ruby 1.9 dans l'intérêt de l'amélioration de la langue dans son ensemble. La plupart des gens n'ont pas trouvé cela trop pénible. P>
L'équipe de développement de Ruby a décidé que Ruby 1.8.7 devrait être une version de transition en ajoutant certaines des fonctionnalités de la bibliothèque que Ruby 1.9 introduites. Ils ont pris beaucoup de critiques pour la décision et de nombreuses entreprises rubis sont restées (et de nombreuses personnes restent encore) sur Ruby 1.8.6, car elles sentent que les changements introduits 1.8.7 sont trop grands et trop risqués. Mais néanmoins, 1,8,7 reste, et les fonctions d'itération Les recenseurs sont l'une des fonctionnalités incorporées. P>
C'est cette fonctionnalité de migration que vous voyez dans 1.8.7, ce qui n'est pas présent dans 1.8.6. P>
La réponse de Sepp2k donne une bonne solution de contournement. Il n'y a pas grand chose pour moi d'ajouter sur ce compte. P>
J'ajouterais que 1.8.7 est principalement compatible (et quand ce n'est pas le cas, 1,9 ne sera pas). Vérifiez cette question Stackoverflow.com/Questions/2544185/...
Ruby 1.8.7 introduit Beaucoup de modifications . Si vous souhaitez les utiliser dans Ruby 1.8.6, tout simplement
require 'backports'