From: "zverok (Victor Shepelev)" <noreply@ruby-lang.org>
To: ruby-core@ml.ruby-lang.org
Subject: [ruby-core:111212] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior
Date: Mon, 05 Dec 2022 15:17:46 +0000 (UTC) [thread overview]
Message-ID: <redmine.journal-100502.20221205151745.52587@ruby-lang.org> (raw)
In-Reply-To: redmine.issue-19184.20221205143729.52587@ruby-lang.org
Issue #19184 has been updated by zverok (Victor Shepelev).
Status changed from Open to Feedback
It is not about Range, but about the change of `String#succ` behavior.
[Here is the reason](https://rubyreferences.github.io/rubychanges/3.0.html#string-always-returning-string) + explanation of the behavior change. Basically, `#succ` and other methods that produce strings from the current string, were consistently redefined to return the `String`, not the current subclass.
----------------------------------------
Bug #19184: create a Range with String subclass presents a weird behavior
https://bugs.ruby-lang.org/issues/19184#change-100502
* Author: clavius_tales (Clavius Tales Rocha Moreira)
* Status: Feedback
* Priority: Normal
* ruby -v: 3.1.3
* Backport: 2.7: UNKNOWN, 3.0: UNKNOWN, 3.1: UNKNOWN
----------------------------------------
``` ruby
class CalendarMonth < String
def succ
self.class.new(
if december?
"#{year + 1}-01"
else
"#{year}-#{(month + 1).to_s.rjust(2, '0')}"
end
)
end
private
def december?
month == 12
end
def month
self[-2..].to_i
end
def year
self[0..3].to_i
end
end
(CalendarMonth.new('2021-11')..CalendarMonth.new('2022-02')).to_a
```
Running the script above in Ruby 2.7.5, we get:
``` ruby
["2021-11", "2021-12", "2022-01", "2022-02"]
```
Running the same script in Ruby 3.1.3:
```ruby
["2021-11",
"2021-12",
"2021-13",
"2021-14",
"2021-15",
"2021-16",
"2021-17",
"2021-18",
"2021-19",
"2021-20",
"2021-21",
"2021-22",
"2021-23",
"2021-24",
"2021-25",
"2021-26",
"2021-27",
"2021-28",
"2021-29",
"2021-30",
"2021-31",
"2021-32",
"2021-33",
"2021-34",
"2021-35",
"2021-36",
"2021-37",
"2021-38",
"2021-39",
"2021-40",
"2021-41",
"2021-42",
"2021-43",
"2021-44",
"2021-45",
"2021-46",
"2021-47",
"2021-48",
"2021-49",
"2021-50",
"2021-51",
"2021-52",
"2021-53",
"2021-54",
"2021-55",
"2021-56",
"2021-57",
"2021-58",
"2021-59",
"2021-60",
"2021-61",
"2021-62",
"2021-63",
"2021-64",
"2021-65",
"2021-66",
"2021-67",
"2021-68",
"2021-69",
"2021-70",
"2021-71",
"2021-72",
"2021-73",
"2021-74",
"2021-75",
"2021-76",
"2021-77",
"2021-78",
"2021-79",
"2021-80",
"2021-81",
"2021-82",
"2021-83",
"2021-84",
"2021-85",
"2021-86",
"2021-87",
"2021-88",
"2021-89",
"2021-90",
"2021-91",
"2021-92",
"2021-93",
"2021-94",
"2021-95",
"2021-96",
"2021-97",
"2021-98",
"2021-99",
"2022-00",
"2022-01",
"2022-02"]
```
I know it's not a good modeling inherit from String class, but...
--
https://bugs.ruby-lang.org/
______________________________________________
ruby-core mailing list -- ruby-core@ml.ruby-lang.org
To unsubscribe send an email to ruby-core-leave@ml.ruby-lang.org
ruby-core info -- https://ml.ruby-lang.org/mailman3/postorius/lists/ruby-core.ml.ruby-lang.org/
prev parent reply other threads:[~2022-12-05 15:18 UTC|newest]
Thread overview: 3+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-05 14:37 [ruby-core:111210] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior clavius_tales (Clavius Tales Rocha Moreira)
2022-12-05 14:41 ` [ruby-core:111211] " clavius_tales (Clavius Tales Rocha Moreira)
2022-12-05 15:17 ` zverok (Victor Shepelev) [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-list from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
List information: https://www.ruby-lang.org/en/community/mailing-lists/
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=redmine.journal-100502.20221205151745.52587@ruby-lang.org \
--to=ruby-core@ruby-lang.org \
--cc=ruby-core@ml.ruby-lang.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).