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:
parent
0406b0f154
commit
645f25356a
2 changed files with 42 additions and 20 deletions
|
@ -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.
|
||||
|
|
55
lib/prime.rb
55
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
|
||||
|
|
Loading…
Reference in a new issue