From: Kenta Murata Date: 2011-05-27T13:34:03+09:00 Subject: [ruby-core:36503] Fw:[ruby-dev:43586] [Ruby 1.9 - Bug #4787][Open] Integer#each_modulo(n) 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 > In Reply To: ruby-dev@ruby-lang.org > To: ruby developers list > 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