1
0
Fork 0
mirror of https://github.com/ruby/ruby.git synced 2022-11-09 12:17:21 -05:00

* 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
This commit is contained in:
yugui 2008-09-04 14:09:52 +00:00
parent 0406b0f154
commit 645f25356a
2 changed files with 42 additions and 20 deletions

View file

@ -1,3 +1,10 @@
Thu Sep 4 23:05:54 2008 Yuki Sonoda (Yugui) <yugui@yugui.jp>
* 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.
Thu Sep 4 21:53:58 2008 Tanaka Akira <akr@fsij.org>
* transcode.c (econv_init): accept an integer as 3rd argument as well.

View file

@ -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