Actions
Bug #12863
closedHash#compact! behavior different from the Active Support Hash#compact!
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) about 8 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) about 8 years ago
Hm, looks like returning nil
(if nothing was dropped) is standard behavior of Hash#reject!. Weird.
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Tracker changed from Misc to Bug
- Backport set to 2.1: UNKNOWN, 2.2: UNKNOWN, 2.3: UNKNOWN
Updated by nobu (Nobuyoshi Nakada) about 8 years ago
- Status changed from Open to Closed
Applied in changeset r56473.
hash.c: fix Hash#compact! return value
- hash.c (rb_hash_compact_bang): should return nil if no elements
is deleted. [ruby-core:77709] [Bug #12863]
Actions
Like0
Like0Like0Like0Like0