From 47cf84af7cb9527d5b50a72b0f9e0af60c6fd96f Mon Sep 17 00:00:00 2001 From: yugui Date: Thu, 4 Sep 2008 14:09:52 +0000 Subject: * lib/prime.rb (Prime::OldCompatibility#each): added compatibility to Ruby 1.8.7. (Prime#each): added more rdocs. (Prime#each): remembers the last value of the given block. git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@19135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- lib/prime.rb | 55 +++++++++++++++++++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 20 deletions(-) (limited to 'lib') diff --git a/lib/prime.rb b/lib/prime.rb index be1c8b42a..dd1190a0c 100644 --- a/lib/prime.rb +++ b/lib/prime.rb @@ -91,19 +91,6 @@ class Prime warn "Prime::new is obsolete. use Prime::instance or class methods of Prime." end - module OldCompatibility - def succ - @generator.succ - end - alias next succ - - def each(&block) - loop do - yield succ - end - end - end - class< @ubound - block.call p + prime = succ + break last_value if prime > @ubound + last_value = block.call(prime) end else loop do - block.call succ + block.call(succ) end end end @@ -351,7 +346,7 @@ class Prime - # An implementation of prime table by trial division method. + # Internal use. An implementation of prime table by trial division method. class TrialDivision include Singleton @@ -399,7 +394,7 @@ class Prime end end - # An implementation of eratosthenes's sieve + # Internal use. An implementation of eratosthenes's sieve class EratosthenesSieve include Singleton @@ -443,4 +438,24 @@ class Prime end end end + + # Provides a +Prime+ object with compatibility to Ruby 1.8 when instanciated via +Prime+.+new+. + module OldCompatibility + # Returns the next prime number and forwards internal pointer. + def succ + @generator.succ + end + alias next succ + + # Overwrites Prime#each. + # + # Iterates the given block over all prime numbers. Note that enumeration starts from + # the current position of internal pointer, not rewinded. + def each(&block) + return @generator.dup unless block_given? + loop do + yield succ + end + end + end end -- cgit