Actions
Feature #21615
closedIntroduce `Array#values`
Feature #21615:
Introduce `Array#values`
Status:
Rejected
Assignee:
-
Target version:
-
Description
Motivation¶
In Ruby code, it's common to accept arrays and hashes and treat them uniformly as collections of values. Hash exposes #values, but Array does not, which pushes developers toward is_a?/respond_to? branching.
Following the Principle of Least Surprise, users may reasonably expect Array#values to exist because:
- Both
ArrayandHashalready implement#values_at. -
Hashimplements#valuesbutArraydoes not.
Example¶
Today:
def normalize_records(input)
items = input.respond_to?(:values) ? input.values : input
items.each do |item|
do_stuff_with_item(item)
end
end
With Array#values:
def normalize_records(input)
input.values.each do |item|
do_stuff_with_item(item)
end
end
Proposal¶
Add Array#values, returning a copy of the elements of self.
This yields a uniform interface for Array and Hash values without type checks.
Alternatives considered¶
-
Enumerable#values: defaulting toto_a, but I found it too broad of a change. -
Array#each_value: redundant asArray#eachalready covers iteration.
Actions