Project

General

Profile

Actions

Feature #21615

open

Introduce `Array#values`

Added by matheusrich (Matheus Richard) 2 days ago. Updated 1 day ago.

Status:
Open
Assignee:
-
Target version:
-
[ruby-core:123319]

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 Array and Hash already implement #values_at.
  • Hash implements #values but Array does 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 to to_a, but I found it too broad of a change.
  • Array#each_value: redundant as Array#each already covers iteration.

Patch: https://github.com/ruby/ruby/pull/14641

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0