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

RDoc: Enhanced introduction for Enumerable (#4004)

* RDoc: Enhanced introduction for Enumerable

* RDoc: Enhanced introduction for Enumerable

* RDoc: Enhanced introduction for Enumerable
This commit is contained in:
Burdette Lamar 2021-01-04 22:39:13 -06:00 committed by GitHub
parent 515d6b47ad
commit f2d0d4cb0a
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
Notes: git 2021-01-05 13:39:38 +09:00
Merged-By: marcandre <github@marc-andre.ca>

136
enum.c
View file

@ -4221,13 +4221,135 @@ enum_compact(VALUE obj)
/*
* The Enumerable mixin provides collection classes with several
* traversal and searching methods, and with the ability to sort. The
* class must provide a method #each, which yields
* successive members of the collection. If Enumerable#max, #min, or
* #sort is used, the objects in the collection must also implement a
* meaningful <code><=></code> operator, as these methods rely on an
* ordering between members of the collection.
* == What's Here
*
* \Module \Enumerable provides methods that are useful to a collection class for:
* - {Querying}[#module-Enumerable-label-Methods+for+Querying]
* - {Fetching}[#module-Enumerable-label-Methods+for+Fetching]
* - {Searching}[#module-Enumerable-label-Methods+for+Searching]
* - {Sorting}[#module-Enumerable-label-Methods+for+Sorting]
* - {Iterating}[#module-Enumerable-label-Methods+for+Iterating]
* - {And more....}[#module-Enumerable-label-Other+Methods]
*
* === Methods for Querying
*
* These methods return information about the \Enumerable other than the elements themselves:
*
* #include?, #member?:: Returns +true+ if self == object, +false+ otherwise.
* #all?:: Returns +true+ if all elements meet a specified criterion; +false+ otherwise.
* #any?:: Returns +true+ if any element meets a specified criterion; +false+ otherwise.
* #none?:: Returns +true+ if no element meets a specified criterion; +false+ otherwise.
* #one?:: Returns +true+ if exactly one element meets a specified criterion; +false+ otherwise.
* #count:: Returns the count of elements,
* based on an argument or block criterion, if given.
* #tally:: Returns a new \Hash containing the counts of occurrences of each element.
*
* === Methods for Fetching
*
* These methods return entries from the \Enumerable, without modifying it:
*
* <i>Leading, trailing, or all elements</i>:
* #entries, #to_a:: Returns all elements.
* #first:: Returns the first element or leading elements.
* #take:: Returns a specified number of leading elements.
* #drop:: Returns a specified number of trailing elements.
* #take_while:: Returns leading elements as specified by the given block.
* #drop_while:: Returns trailing elements as specified by the given block.
*
* <i>Minimum and maximum value elements</i>:
* #min:: Returns the elements whose values are smallest among the elements,
* as determined by <tt><=></tt> or a given block.
* #max:: Returns the elements whose values are largest among the elements,
* as determined by <tt><=></tt> or a given block.
* #minmax:: Returns a 2-element \Array containing the smallest and largest elements.
* #min_by:: Returns the smallest element, as determined by the given block.
* #max_by:: Returns the largest element, as determined by the given block.
* #minmax_by:: Returns the smallest and largest elements, as determined by the given block.
*
* <i>Groups, slices, and partitions</i>:
* #group_by:: Returns a \Hash that partitions the elements into groups.
* #partition:: Returns elements partitioned into two new Arrays, as determined by the given block.
* #slice_after:: Returns a new \Enumerator whose entries are a partition of +self+,
based either on a given +object+ or a given block.
* #slice_before:: Returns a new \Enumerator whose entries are a partition of +self+,
based either on a given +object+ or a given block.
* #slice_when:: Returns a new \Enumerator whose entries are a partition of +self+
based on the given block.
* #chunk:: Returns elements organized into chunks as specified by the given block.
* #chunk_while:: Returns elements organized into chunks as specified by the given block.
*
* === Methods for Searching and Filtering
*
* These methods return elements that meet a specified criterion.
*
* #find, #detect:: Returns an element selected by the block.
* #find_all, #filter, #select:: Returns elements selected by the block.
* #find_index:: Returns the index of an element selected by a given object or block.
* #reject:: Returns elements not rejected by the block.
* #uniq:: Returns elements that are not duplicates.
*
* === Methods for Sorting
*
* These methods return elements in sorted order.
*
* #sort:: Returns the elements, sorted by <tt><=></tt> or the given block.
* #sort_by:: Returns the elements, sorted by the given block.
*
* === Methods for Iterating
*
* #each_entry:: Calls the block with each successive element
* (slightly different from #each).
* #each_with_index:: Calls the block with each successive element and its index.
* #each_with_object:: Calls the block with each successive element and a given object.
* #each_slice:: Calls the block with successive non-overlapping slices.
* #each_cons:: Calls the block with successive overlapping slices.
* (different from #each_slice).
* #reverse_each:: Calls the block with each successive element, in reverse order.
*
* === Other Methods
*
* #map, #collect:: Returns objects returned by the block.
* #filter_map:: Returns truthy objects returned by the block.
* #flat_map, #collect_concat:: Returns flattened objects returned by the block.
* #grep:: Returns elements selected by a given object
* or objects returned by a given block.
* #grep_v:: Returns elements selected by a given object
* or objects returned by a given block.
* #reduce, #inject:: Returns the object formed by combining all elements.
* #sum:: Returns the sum of the elements, using method +++.
* #zip:: Combines each element with elements from other enumerables;
* returns the n-tuples or calls the block with each.
* #cycle:: Calls the block with each element, cycling repeatedly.
*
* == Usage
*
* To use module \Enumerable in a collection class:
* - Include it:
* include Enumerable
* - Implement method <tt>#each</tt>
* which must yield successive elements of the collection.
* This method will be called by almost any \Enumerable method.
*
* == \Enumerable in Ruby Core Classes
* Some Ruby classes include \Enumerable:
* - Array
* - Dir
* - Hash
* - IO
* - Range
* - Set
* - Struct
* Virtually all methods in \Enumerable call method +#each+ in the including class:
* - <tt>Hash#each</tt> yields the next key-value pair as a 2-element \Array.
* - <tt>Struct#each</tt> yields the next name-value pair as a 2-element \Array.
* - For the other classes above, +#each+ yields the next object from the collection.
*
* == About the Examples
* The example code snippets for the \Enumerable methods:
* - Always show the use of one or more \Array-like classes (often \Array itself).
* - Sometimes show the use of a \Hash-like class.
* For some methods, though, the usage would not make sense,
* and so it is not shown. Example: #tally would find exactly one of each \Hash entry.
*/
void