Project

General

Profile

Actions

Bug #19533

closed

Behavior of ===/include? on a beginless/endless range (nil..nil) changed in ruby 3.2

Added by knu (Akinori MUSHA) about 1 year ago. Updated 10 months ago.

Status:
Closed
Assignee:
-
Target version:
ruby -v:
ruby 3.2.1 (2023-02-08 revision 31819e82c8) [x86_64-darwin22]
[ruby-core:112922]

Description

Starting from Ruby 2.7.0 a range nil..nil used to match any value until 3.2.0-preview3, but 3.2.0-rc1 started to reject it.

% docker run -it --rm rubylang/all-ruby ./all-ruby -e 'p( (nil..nil) === 1 )'
(snip)
ruby-2.6.10           false
ruby-2.7.0-preview1   true
...
ruby-3.2.0-preview3   true
ruby-3.2.0-rc1        -e:1:in `===': cannot determine inclusion in beginless/endless ranges (TypeError)

                      p( (nil..nil) === 1 )
                                        ^
                        from -e:1:in `<main>'
                  exit 1
...
ruby-3.2.1            -e:1:in `===': cannot determine inclusion in beginless/endless ranges (TypeError)

                      p( (nil..nil) === 1 )
                                        ^
                        from -e:1:in `<main>'

The previous behavior was so useful because when you have optional lower and upper bounds lbound..rbound would always work regardless of each end being nil or not.

There is no mention of this in doc/NEWS/NEWS-3.2.0.md, so I'm afraid it was caused unintentionally while fixing other problems.

% docker run -it --rm rubylang/all-ruby ./all-ruby -e 'p( (nil..nil).cover?(1) )'
(snip)
ruby-2.6.10           false
ruby-2.7.0-preview1   true
...
ruby-3.2.1            true

This was pointed out by the following blog article (written in Japanese) as a "pitfall" that you need to work around when upgrading Ruby from 3.0/3.1 to 3.2.
https://blog.studysapuri.jp/entry/2023/03/16/ujihisa-ruby32#endless-range%E3%81%AE%E6%8C%99%E5%8B%95%E3%81%AE%E5%A4%89%E6%9B%B4


Related issues 1 (0 open1 closed)

Related to Ruby master - Bug #18580: Range#include? inconsistency for beginless String rangesClosedActions
Actions

Also available in: Atom PDF

Like0
Like0Like0Like0Like0Like0Like0Like0Like0