2013-09-27 32 views
3

據我所知Array類已經在Enumerable模塊中混合。爲什麼在Array已經是Enumerable時使用Array#to_enum?

如果是這樣,爲什麼沒有[: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

「Enumerable」表示該類獲得了一堆創建「枚舉器」的免費方法。與Java的IterableIterator接口進行比較。

+0

Enumberable,Enumerator,我忽略了那個!現在一切都很有意義。謝謝。 –

7

to_enumEnumerable無關,它返回EnumeratorArray沒有next方法,因爲nextEnumerator方法,而不是Enumerable方法。

+0

謝謝,我不知道Enumerable和Enumerator之間的區別! –

+2

@JanDvorak'to_enum'是'Object'的一種方法 – Stefan

+0

@Stefan呃......哇。 http://ruby-doc.org/core-1.9.3/Object.html#method-i-to_enum –

相關問題