Actions
Bug #12090
closed`Range#cover` does not raise an exception when comparison fails
Bug #12090: `Range#cover` does not raise an exception when comparison fails
Description
The documentation for Range#cover? says,
cover?(obj) → true or false Returns true if obj is between the begin and end of the range. This tests begin <= obj <= end when exclude_end? is false and begin <= obj < end when exclude_end? is true. which implies that, when comparison fails, cover? should raise an error. But actually, it doesn't:
"a" <= 1 # => ArgumentError: comparison of String with 1 failed 1 <= "a" # => ArgumentError: comparison of Fixnum with String failed ("a".."z").cover?(1) # => false It silently returns false instead of raising an error.
Either Range#cover? should raise an error when comparison fails, or the documentation should be changed to correctly describe this behaviour.
Updated by sos4nt (Stefan Schüßler) over 9 years ago
Raising an error would break backward compatibility. Maybe cover? should just return nil to indicate incomparable values.
("a".."z").cover?("c") # => true ("a".."z").cover?("5") # => false ("a".."z").cover?(1) # => nil
Updated by jeremyevans (Jeremy Evans) over 6 years ago
- Status changed from Open to Closed
Applied in changeset git|3556cba5038530e728eb6309dcf5d4d1a96a02ac.
Document that Range#cover? returns false if <=> returns nil
Fixes [Bug #12090]
Actions