Một điều tra viên có thể được chuyển đổi thành một điều tra viên lười biếng sử dụng Enumerator::Lazy.new như thế này (đây là một ví dụ; ngay từ đầu, tôi đã có một Enumerator, không phải là một mảng):Chuyển đổi điều tra viên để điều tra viên lười biếng
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]
Liệu có một cách ngắn gọn hơn để làm điều đó?
Cảm ơn, có một số tính linh hoạt ở đây, đầu ra của đoạn mã và mỏ của bạn hơi khác: '=> # <Đếm :: Lazy: # <ĐTV: [1, 2, 3]: mỗi >> 'vs' #: each> '. Tôi sẽ thay đổi ví dụ trong câu hỏi. –
tokland
Bạn đã đúng! Cuối cùng sự khác biệt này không liên quan khi điều tra viên được sử dụng, do đó, một 'enum.lazy' đơn giản là con đường để đi. – tokland
Câu trả lời rất hay cho một câu hỏi thú vị. Tại sao không chỉ bắt đầu câu trả lời của bạn với dòng 'enum = (1..10) .each'. –