From: shevegen@... Date: 2017-08-31T18:44:48+00:00 Subject: [ruby-core:82593] [Ruby trunk Bug#13855] Hash#compact! returns nil if the hash is empty Issue #13855 has been updated by shevegen (Robert A. Heiler). Hmm. I had a look at class String and class Array what they do. First Array: array = [1,2,3] # => [1, 2, 3] array.compact! # => nil Next class String - it has no .compact but perhaps we can use .delete! which may be somewhat similar: string = 'abc' # => "abc" string.delete! 'd' # => nil So I assume that the nil returned there may be consistent behaviour. Probably by nature of the assumption of what is returned, modification in place on the same object, or a modification what would return a new object. However had I do agree that, either way, the documentation could be more explicit. No harm in mentioning that the hash.compact! variant will return nil, which is what it is presently doing. I do however had also agree that the behaviour may be a bit unexpected... so perhaps the documentation can be fixed either way and then we can ask whether the behaviour is the way it should be - but I actually assume that it may be just a documentation problem. ---------------------------------------- Bug #13855: Hash#compact! returns nil if the hash is empty https://bugs.ruby-lang.org/issues/13855#change-66414 * Author: elandesign (Paul Smith) * Status: Open * Priority: Normal * Assignee: * Target version: * ruby -v: ruby 2.4.1p111 (2017-03-22 revision 58053) [x86_64-darwin16] * Backport: 2.2: UNKNOWN, 2.3: UNKNOWN, 2.4: UNKNOWN ---------------------------------------- This behaviour feels like a bug to me. From the documentation (with my emphasis): > compact! ��� hsh > Removes all nil values from the hash. **Returns the hash**. However if the hash contains no keys, the method returns nil. ~~~ irb(main):001:0> {}.compact! => nil # For Comparison irb(main):002:0> { foo: nil }.compact! => {} irb(main):003:0> {}.compact => {} irb(main):004:0> { foo: nil }.compact => {} ~~~ -- https://bugs.ruby-lang.org/ Unsubscribe: