From: David Masover on 2 Aug 2010 23:05
On Sunday, August 01, 2010 05:45:02 pm Andrew Wagner wrote:
> How can I get a lazy array in Ruby? E.g., in Haskell, I can talk about
> [1..], which is an infinite list, lazily generated as needed. I can also do
> things like "iterate (+2) 0", which applies whatever function I give it to
> generate a lazy list. In this case, it would give me all even numbers.
> Anyway, I'm sure I can do such things in Ruby, but can't seem to work out
In your specific case, you could do this:
list = (1..(1.0/0))
But you can't necessarily iterate it like you want, so no, Ruby does not have
an equivalent feature. You can do things like this:
That would give you the first ten even numbers, but it wouldn't work the way
you expect -- first(10) actually dumps those into an array, and map
immediately creates a new array from that one. It's not at all like the
So, you can do similar and interesting things, and you can probably get close
to the semantics (roughly), but the implementation is going to be very
imperative/eager, and not at all lazy. You can do lazy-ish transformations by
writing your own Enumerators, but those aren't as elegant to write.
I think this is a solvable problem, even solvable within Ruby, I just haven't
really seen it done, and there doesn't seem to be anything in the core
language that really does it.
First | Prev |
Pages: 1 2
Prev: [ANN] RubyConf registration and Call For Proposals now open!
Next: Ruby 1.9