From: Yukihiro Matsumoto Date: 2007-12-25T11:19:06+09:00 Subject: Re: Enumerable#to_a can run forever Hi, In message "Re: Enumerable#to_a can run forever" on Tue, 25 Dec 2007 08:47:48 +0900, Benjamin Kudria writes: |require 'mathn' |Prime.new.to_a # <- runs forever, never returns | |This seems a bit broken to me, and I was writing a program where I |needed the first n primes, or all the primes under 200, for example, so |I re-wrote Enumerable#to_a like so to make my code more idiomatic: |This allows, for example, the following: |Prime.new.to_a(10) # => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] , the first |10 primes |Prime.new.to_a {|prime| prime < 20} # => [2, 3, 5, 7, 11, 13, 17, 19] , |all the primes under 20 Hmm, in 1.9, you have Enumerable#take to work like your to_i(num), and Enumerable#take_while like your to_i{...}. p Prime.new.take(10) # => [2, 3, 5, 7, 11, 13, 17, 19, 23, 29] p Prime.new.take_while{|prime| prime < 20} # => [2, 3, 5, 7, 11, 13, 17, 19] matz.