diff options
author | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-04 14:09:52 +0000 |
---|---|---|
committer | yugui <yugui@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2008-09-04 14:09:52 +0000 |
commit | 645f25356a4455ccac6aea19b9c7e73bdee9d960 (patch) | |
tree | e37b28dab3a14b54fc86df47195024087202b322 /lib/prime.rb | |
parent | 0406b0f1547d33f1f1abb39524b846c36d5e234e (diff) |
* 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: svn+ssh://ci.ruby-lang.org/ruby/trunk@19135 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/prime.rb')
-rw-r--r-- | lib/prime.rb | 55 |
1 files changed, 35 insertions, 20 deletions
diff --git a/lib/prime.rb b/lib/prime.rb index be1c8b42a0..dd1190a0c7 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<<self extend Forwardable include Enumerable @@ -137,6 +124,14 @@ class Prime # +ubound+:: # Upper bound of prime numbers. The iterator stops after # yields all prime numbers p <= +ubound+. + # + # == Note + # +Prime+.+new+ returns a object extended by +Prime+::+OldCompatibility+ + # in order to compatibility to Ruby 1.9, and +Prime+#each is overwritten + # by +Prime+::+OldCompatibility+#+each+. + # + # +Prime+.+new+ is now obsolete. Use +Prime+.+instance+.+each+ or simply + # +Prime+.+each+. def each(ubound = nil, generator = EratosthenesGenerator.new, &block) generator.upper_bound = ubound generator.each(&block) @@ -254,18 +249,18 @@ class Prime end # Iterates the given block for each prime numbers. - # +ubound+:: def each(&block) return self.dup unless block if @ubound + last_value = nil loop do - p = succ - break if p > @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 |