Hi,

I believe I've sent the following feature request to ruby-core,
but I sent to ruby-dev by mistake.

-- 
Kenta Murata
Sent with Sparrow (http://www.sparrowmailapp.com)

Forwarded Message

> From: Kenta Murata <muraken / gmail.com>
> In Reply To: ruby-dev / ruby-lang.org
> To: ruby developers list <ruby-dev / ruby-lang.org>
> Date: 2011-05-27 13:21:06
> Subject: [ruby-dev:43586] [Ruby 1.9 - Bug #4787][Open] Integer#each_modulo(n)
> 
> 
> Issue #4787 has been reported by Kenta Murata.
> 
> ----------------------------------------
> Bug #4787: Integer#each_modulo(n)
> http://redmine.ruby-lang.org/issues/4787
> 
> Author: Kenta Murata
> Status: Open
> Priority: Normal
> Assignee: Yukihiro Matsumoto
> Category: core
> Target version: 1.9.3
> ruby -v: ruby 1.9.3dev (2011-05-27 trunk 31745) [x86_64-darwin10.7.0]
> 
> 
> I suggest a new feature of Integer to enumerate by iterated Integer#modulo.
> An example implementation in Ruby is the following code:
> 
>  class Integer
>  def each_modulo(n)
>  raise ArgumentError, "argument must be an Integer" unless n.is_a? Integer
>  raise ArgumentError, "argument must be larger than 1" if n <= 1
>  return Enumerator.new(self, :each_modulo, n) unless block_given?>  q = self
>  while q > 0
>  q, r = q.divmod(n)
>  yield(r)
>  end
>  end
>  end
> 
>  p 133.each_modulo(3).to_a #=> [1, 2, 2, 1, 1]
> 
> The following code is an example use of the feature:
> 
>  class Integer
>  def each_thousand_separation
>  each_modulo(1000)
>  end
> 
>  def thousand_separated_string(sep=',')
>  each_thousand_separation.map(&'%03d'.method(:%)).inject{|s, n|n + sep + s }
>  end
>  end
> 
>  p 100_000_000_200.thousand_separated_string #=> "100,000,000,200"
> 
> I make an implementation in C, and attach the patch for that.
> 
> 
> -- 
> http://redmine.ruby-lang.org