Actions
Misc #11520
closedInconsistent behavior in Array#compact!
Misc #11520:
Inconsistent behavior in Array#compact!
Status:
Rejected
Assignee:
-
Actions
Added by postmodern (Hal Brodigan) about 11 years ago. Updated about 11 years ago.
This behavior is consistent with many other "bang methods" which return nil if they might have mutated the receiver but didn't:
[
'foo'.downcase!,
'BAR'.upcase!,
'Baz'.capitalize!,
'foo'.strip!,
'bar'.lstrip!,
'baz'.rstrip!,
'foo'.sub!(/\d/, 'x'),
'bar'.gsub!(/\d/, 'x'),
'abc'.tr!('def', 'ghi'),
[1,2,3].compact!,
[1,2,3].flatten!,
[1,2,3].uniq!
].any? # => false
This idiom is a Good Thing because it provides you with greater information density than if these methods simply returned the mutated receiver, since that's something to which you already have a reference. In the common enough case that you want to know whether something changed, you can simply use the return value rather than storing a copy of the object and comparing it before and after (potential) mutation.
Ah, I was unaware that was the intention. I guess I should use .tap(&:compact!) instead. This issue can be closed.