Project

General

Profile

Actions

Bug #12863

closed

Hash#compact! behavior different from the Active Support Hash#compact!

Added by cha1tanya (Prathamesh Sonpatki) over 7 years ago. Updated over 7 years ago.

Status:
Closed
Assignee:
-
Target version:
-
[ruby-core:77709]

Description

Hash#compact and Hash#compact! were added in https://bugs.ruby-lang.org/issues/11818 but the Hash#compact! is different from Active Support. Please check following snippet:

# Active Support
>> hash = { a: true, b: false, c: nil }
=> {:a=>true, :b=>false, :c=>nil}
>> hash.compact!
=> {:a=>true, :b=>false}
>> hash.compact!
=> nil

# Ruby dev

>> hash = { a: true, b: false, c: nil }
=> {:a=>true, :b=>false, :c=>nil}
>> hash.compact!
=> {:a=>true, :b=>false}
>> hash.compact!
=> {:a=>true, :b=>false}
>> 

@nobu (Nobuyoshi Nakada) Was it intentional to not return nil in case of compact! when none of the values are nil?

Updated by zverok (Victor Shepelev) over 7 years ago

What is the reason of returning nil in that case? I believe in standard containers all bang-versions always return self?

Updated by zverok (Victor Shepelev) over 7 years ago

Hm, looks like returning nil (if nothing was dropped) is standard behavior of Hash#reject!. Weird.

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

  • Tracker changed from Misc to Bug
  • Backport set to 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
Actions #4

Updated by nobu (Nobuyoshi Nakada) over 7 years ago

  • Status changed from Open to Closed

Applied in changeset r56473.


hash.c: fix Hash#compact! return value

Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0