2013-09-27 2 views
3

Насколько я понимаю, класс Array уже смешивается в модуле Enumerable.Зачем использовать Array # to_enum, если Array уже перечислит?

Если это так, почему нет [:example].next?

Зачем мне это нужно [:example].to_enum.next?

+1

Поскольку метод 'next' определен в классе' Enumerator', а не 'Array'. Смешивание массивов в Enumerable, что делает разговор в «Enumerator» возможным в первую очередь. –

+0

То же, что и [this] (http://stackoverflow.com/questions/2863044/what-is-the-advantage-of-creating-an-enumerable-object-using-to-enum-in-ruby)? –

ответ

3

Потому что Enumerable module отличается от Enumerator class.

Быть «Перечислимым» означает, что класс получает кучу халявных методов, которые создают «Перечислители». Сравнение с интерфейсами Java Iterable и Iterator.

+0

Enumbererator, Enumerator, я пропустил это! теперь все имеет смысл. Спасибо. –

7

to_enum не имеет отношения к Enumerable, он возвращает Enumerator. Array не имеет метода next, потому что next - метод Enumerator, а не метод Enumerable.

+0

Спасибо, я не знал разницы между Enumerable и Enumerator! –

+2

@JanDvorak 'to_enum' - это метод' Object' – Stefan

+0

@Stefan uhh ... wow. http://ruby-doc.org/core-1.9.3/Object.html#method-i-to_enum –

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