Numerator można przekształcić leniwe wyliczający stosując Enumerator::Lazy.new tak (to przykład, na początku, już mają wyliczający, a nie tablicą):Konwersja numeratora lazy wyliczający
xs_enum = [1, 2, 3].to_enum
# => #<Enumerator: [1, 2, 3]:each>
xs_lazy_enum = Enumerator::Lazy.new(xs_enum, &:yield)
# => #<Enumerator::Lazy: #<Enumerator: [1, 2, 3]:each>:each>
xs_lazy_enum.force
# => [1, 2, 3]
jest istnieje bardziej zwięzły sposób na to?
Dzięki, istnieją pewne subtility tutaj, wyjście fragmencie i moje są nieco inaczej: '=> #> 'vs' # : each> ". Zmienię przykład w pytaniu. –
tokland
Masz rację! Na końcu ta różnica nie jest istotna, gdy używa się modułu wyliczającego, więc proste "enum.lazy" jest drogą do zrobienia. – tokland
Bardzo dobra odpowiedź na interesujące pytanie. Dlaczego po prostu nie rozpoczynać odpowiedzi od linii 'enum = (1..10) .each'. –