2010-02-19 1 views
1

Я пытаюсь использовать Enumerable # each_slice. Он не работает на моем компьютере, заявив, что этот метод не найден.Почему не работает each_slice?

Я бегу рубин 1.8.6 (2008-08-11) 287 номера патчей [универсального darwin9.0]

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

Пример:

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

Что же я делать не так?

+0

Вы уверены, что ruby-doc не относится к ruby ​​1.9? – Pete

+0

Как это понять? Я не вижу ничего в API, заявляющем версию. – Pran

ответ

7

В рубине 1.8.6 вы должны require 'enumerator' (который является частью stdlib и был объединен с ядром в 1.8.7+) перед использованием each_slice.

К сожалению, в ruby-doc перечислены методы, которые добавляются в базовые классы stdlib без упоминания о методах.

+0

Спасибо! FYI, я попробовал , и это дало мне исключение. С другой стороны, работал, и метод был доступен. – Pran

+0

Вы правы, это перечислитель. Виноват. – sepp2k

1

только по сравнению 1.8.6 до 1,9, и это выглядит как

(1..10).respond_to? :each_slice 

истинна в 1,9 и ложна в 1.8.6. Итак, документ, который вы используете, не для 1.8.6. если вы можете легко перейти на новую версию Ruby, он должен предоставить вам этот метод в Range.

+0

Спасибо, в следующий раз я проверю версию документов. – Pran

+0

Не правда. Связанные документы для 1.8.6. Документы для 1.8.7 и 1.9 имеют core-1.8.7 и core-1.9 соответственно вместо ядра в своем URL-адресе. Дело в том, что в основных документах также перечисляются методы, которые добавляются в основные классы по файлам в stdlib (да, это отстой). – sepp2k

Смежные вопросы