2010-02-19 12 views
1

J'essaie d'utiliser le # chaque_slice Enumerable. Cela ne fonctionne pas sur mon ordinateur, indiquant que cette méthode n'est pas trouvée.Pourquoi each_slice ne fonctionne-t-il pas?

Je courais Ruby 1.8.6 (2008-08-11 patchlevel 287) [universel darwin9.0]

API: http://ruby-doc.org/core/classes/Enumerable.html#M003142

Exemple:

(1..10).each_slice(3) {|a| p a} # I get NoMethodError: undefined method `each_slice' for 1..10:Range 

Que suis-je mal faire?

+0

Êtes-vous sûr que le ruby-doc ne se réfère pas à ruby ​​1.9? – Pete

+0

Comment puis-je comprendre cela? Je ne vois rien dans l'API indiquant la version. – Pran

Répondre

7

Dans ruby ​​1.8.6 vous devez require 'enumerator' (qui fait partie de stdlib et a été fusionné en core dans 1.8.7+) avant d'utiliser each_slice. Malheureusement, le ruby-doc répertorie les méthodes qui sont ajoutées aux classes de base par stdlib sans mentionner d'où proviennent les méthodes.

+0

Merci! Pour info, j'ai essayé et cela m'a donné une exception. D'un autre côté, a fonctionné et la méthode était disponible. – Pran

+0

Vous avez raison, c'est recenseur. Mon erreur. – sepp2k

1

juste par rapport à 1,9 1.8.6 et il ressemble à

(1..10).respond_to? :each_slice 

est vrai dans 1,9 et faux en 1.8.6. Donc, le document que vous utilisez n'est pas pour 1.8.6. Si vous pouvez mettre à niveau vers une version plus récente de Ruby, il devrait vous donner cette méthode sur la gamme.

+0

Merci, la prochaine fois je vais vérifier la version docs. – Pran

+0

Pas vrai en réalité. Les docs liés sont pour 1.8.6. Les docs pour 1.8.7 et 1.9 ont respectivement des core-1.8.7 et core-1.9 au lieu de core dans leur URL. C'est juste que les docs de base listent aussi les méthodes qui sont ajoutées aux classes de base par des fichiers dans stdlib (oui, ça craint). – sepp2k

Questions connexes