Bug #6760
unexpected behavior in Enumerable method all? if collection is empty
Description
if collection is empty all? always return true even if we call it with undefined method
for example
-> [].all?(&:undefined_mathod) #=> true
-> {}.all?(&:undefined_mathod) #=> true
etc.
my fix for it un ruby:
module Enumerable
alias_method :_original_method_all?, :all?
def all?(&block)
return false if count == 0
if block_given? _original_method_all?(&block) else _original_method_all? end
end
end
example test file in attach
History
#1
[ruby-core:46571]
Updated by marcandre (Marc-Andre Lafortune) almost 6 years ago
- Status changed from Open to Rejected
This is not a bug. This behavior is clear from the documentation, both in the form with and without a block:
"The method returns true if the block never returns false or nil."
"If the block is not given [...] will return true only if none of the collection members are false or nil."
You may open a feature request if you want, but I feel it won't be accepted, because the current behavior makes sense (see http://en.wikipedia.org/wiki/Vacuous_truth ). It would be an incompatible change and would need very good justification.
#2
[ruby-core:46572]
Updated by shemerey (Anton Shemerey) almost 6 years ago
thx for your explanation now it's clear.
I think this bug can be closed
bunch of thanks, i don't thought about this problem from "Vacuous truth" side %-)