* enum.c (Enumerable#chunk: Improved examples, grammar, and formatting

Patch by Dan Bernier and Rich Bruchal of newhaven.rb
  [Github documenting-ruby/ruby#8]


git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@39370 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
This commit is contained in:
zzak 2013-02-22 02:11:26 +00:00
parent 8d4a11c919
commit d2c218d559
2 changed files with 32 additions and 29 deletions

View File

@ -1,3 +1,9 @@
Fri Feb 22 11:10:00 2013 Zachary Scott <zachary@zacharyscott.net>
* enum.c (Enumerable#chunk: Improved examples, grammar, and formatting
Patch by Dan Bernier and Rich Bruchal of newhaven.rb
[Github documenting-ruby/ruby#8]
Fri Feb 22 11:00:00 2013 Zachary Scott <zachary@zacharyscott.net> Fri Feb 22 11:00:00 2013 Zachary Scott <zachary@zacharyscott.net>
* numeric.c: Examples and formatting for Numeric and Float * numeric.c: Examples and formatting for Numeric and Float

55
enum.c
View File

@ -2394,17 +2394,13 @@ chunk_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
* enum.chunk { |elt| ... } -> an_enumerator * enum.chunk { |elt| ... } -> an_enumerator
* enum.chunk(initial_state) { |elt, state| ... } -> an_enumerator * enum.chunk(initial_state) { |elt, state| ... } -> an_enumerator
* *
* Creates an enumerator for each chunked elements. * Enumerates over the items, chunking them together based on the return
* The consecutive elements which have same block value are chunked. * value of the block.
* *
* The result enumerator yields the block value and an array of chunked elements. * Consecutive elements which return the same block value are chunked together.
* So "each" method can be called as follows.
*
* enum.chunk { |elt| key }.each { |key, ary| ... }
* enum.chunk(initial_state) { |elt, state| key }.each { |key, ary| ... }
* *
* For example, consecutive even numbers and odd numbers can be * For example, consecutive even numbers and odd numbers can be
* splitted as follows. * chunked as follows.
* *
* [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk { |n| * [3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5].chunk { |n|
* n.even? * n.even?
@ -2430,13 +2426,18 @@ chunk_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
* # ["D", 791] * # ["D", 791]
* # ... * # ...
* *
* The following key values has special meaning: * The following key values have special meaning:
* - nil and :_separator specifies that the elements are dropped. * - +nil+ and +:_separator+ specifies that the elements should be dropped.
* - :_alone specifies that the element should be chunked as a singleton. * - +:_alone+ specifies that the element should be chunked by itself.
* Other symbols which begins an underscore are reserved.
* *
* nil and :_separator can be used to ignore some elements. * Any other symbols that begin with an underscore will raise an error:
* For example, the sequence of hyphens in svn log can be eliminated as follows. *
* items.chunk { |item| :_underscore }
* #=> RuntimeError: symbol begins with an underscore is reserved
*
* +nil+ and +:_separator+ can be used to ignore some elements.
*
* For example, the sequence of hyphens in svn log can be eliminated as follows:
* *
* sep = "-"*72 + "\n" * sep = "-"*72 + "\n"
* IO.popen("svn log README") { |f| * IO.popen("svn log README") { |f|
@ -2456,7 +2457,7 @@ chunk_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
* # "\n"] * # "\n"]
* # ... * # ...
* *
* paragraphs separated by empty lines can be parsed as follows. * Paragraphs separated by empty lines can be parsed as follows:
* *
* File.foreach("README").chunk { |line| * File.foreach("README").chunk { |line|
* /\A\s*\z/ !~ line || nil * /\A\s*\z/ !~ line || nil
@ -2464,26 +2465,22 @@ chunk_i(VALUE yielder, VALUE enumerator, int argc, VALUE *argv)
* pp lines * pp lines
* } * }
* *
* :_alone can be used to pass through bunch of elements. * +:_alone+ can be used to force items into their own chunk.
* For example, sort consecutive lines formed as Foo#bar and * For example, you can put lines that contain a URL by themselves,
* pass other lines, chunk can be used as follows. * and chunk the rest of the lines together, like this:
* *
* pat = /\A[A-Z][A-Za-z0-9_]+\#/ * pattern = /http/
* open(filename) { |f| * open(filename) { |f|
* f.chunk { |line| pat =~ line ? $& : :_alone }.each { |key, lines| * f.chunk { |line| line =~ pattern ? :_alone : true }.each { |key, lines|
* if key != :_alone * pp lines
* print lines.sort.join('')
* else
* print lines.join('')
* end
* } * }
* } * }
* *
* If the block needs to maintain state over multiple elements, * If the block needs to maintain state over multiple elements,
* _initial_state_ argument can be used. * an +initial_state+ argument can be used.
* If non-nil value is given, * If a non-nil value is given,
* it is duplicated for each "each" method invocation of the enumerator. * a reference to it is passed as the 2nd argument of the block for the
* The duplicated object is passed to 2nd argument of the block for "chunk" method. * +chunk+ method, so state-changes to it persist across block calls.
* *
*/ */
static VALUE static VALUE