Project

General

Profile

Feature #15123

Enumerable#compact proposal

Added by printercu (Max Melentiev) 10 months ago. Updated about 2 months ago.

Status:
Open
Priority:
Normal
Target version:
-
[ruby-core:89017]

Description

Hi!

While Enumerable does not provide #compact method, it requires changing code in some cases to substitute array with enumerator.

For example, to reduce memory usage it's usual to change large_array.map { to_heavy_object }.chained_methods to large_array.lazy.... However if chained_methods contains compact, this change will fail. Replacing compact with reject(&:nil?) fixes it.

What do you think about adding #compact to Enumerable?

History

Updated by greggzst (Grzegorz Jakubiak) 10 months ago

I'm in favor of this proposal. It simplifies working with large and small collections so one doesn't have to remember that can't use #compact when enumerator is returned and have to fall back to #reject(:nil?).

Updated by marcandre (Marc-Andre Lafortune) 10 months ago

  • Assignee set to matz (Yukihiro Matsumoto)

Proposal seems acceptable to me.

Just to be clear: I imagine that Lazy#compact would still be lazy. Also compact is roughly select(&:itself), not reject(&:nil?) which would wrongly keep false.

Updated by Eregon (Benoit Daloze) 10 months ago

marcandre (Marc-Andre Lafortune) wrote:

Also compact is roughly select(&:itself), not reject(&:nil?) which would wrongly keep false.

No, #compact only removes nil: ["a" ,false ,nil].compact => ["a", false].

Updated by shevegen (Robert A. Heiler) 10 months ago

I think if the meaning is consistent (e. g. .compact meaning to eliminate
nil values from a given collection) then this seems ok. Perhaps this could
be added for the next developer meeting.

Updated by marcandre (Marc-Andre Lafortune) 10 months ago

Eregon (Benoit Daloze) wrote:

No, #compact only removes nil: ["a" ,false ,nil].compact => ["a", false].

Lol, ouch, not sure how I could be so confused when I wrote that, sorry!

#6

Updated by nobu (Nobuyoshi Nakada) 10 months ago

  • Backport deleted (2.3: UNKNOWN, 2.4: UNKNOWN, 2.5: UNKNOWN)
  • Tracker changed from Bug to Feature

Updated by shyouhei (Shyouhei Urabe) about 2 months ago

Just leaving a comment that I wanted this method in my pet project just now. So +1.

Also available in: Atom PDF