Actions
Bug #12863
closedHash#compact! behavior different from the Active Support Hash#compact!
Bug #12863:
Hash#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) almost 10 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) almost 10 years ago
Hm, looks like returning nil (if nothing was dropped) is standard behavior of Hash#reject!. Weird.
Updated by nobu (Nobuyoshi Nakada) almost 10 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) almost 10 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