* [ruby-core:111210] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior
@ 2022-12-05 14:37 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 ` [ruby-core:111212] " zverok (Victor Shepelev)
0 siblings, 2 replies; 3+ messages in thread
From: clavius_tales (Clavius Tales Rocha Moreira) @ 2022-12-05 14:37 UTC (permalink / raw)
To: ruby-core
Issue #19184 has been reported by clavius_tales (Clavius Tales Rocha Moreira).
----------------------------------------
Bug #19184: create a Range with String subclass presents a weird behavior
https://bugs.ruby-lang.org/issues/19184
* Author: clavius_tales (Clavius Tales Rocha Moreira)
* Status: Open
* 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/
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ruby-core:111211] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior
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 ` clavius_tales (Clavius Tales Rocha Moreira)
2022-12-05 15:17 ` [ruby-core:111212] " zverok (Victor Shepelev)
1 sibling, 0 replies; 3+ messages in thread
From: clavius_tales (Clavius Tales Rocha Moreira) @ 2022-12-05 14:41 UTC (permalink / raw)
To: ruby-core
Issue #19184 has been updated by clavius_tales (Clavius Tales Rocha Moreira).
``` ruby
class CalendarMonth < String
def succ
self.class.new(next_month_string)
end
private
def next_month_string
if december?
"#{year + 1}-01"
else
"#{year}-#{(month + 1).to_s.rjust(2, '0')}"
end
end
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...
----------------------------------------
Bug #19184: create a Range with String subclass presents a weird behavior
https://bugs.ruby-lang.org/issues/19184#change-100501
* Author: clavius_tales (Clavius Tales Rocha Moreira)
* Status: Open
* 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/
^ permalink raw reply [flat|nested] 3+ messages in thread
* [ruby-core:111212] [Ruby master Bug#19184] create a Range with String subclass presents a weird behavior
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)
1 sibling, 0 replies; 3+ messages in thread
From: zverok (Victor Shepelev) @ 2022-12-05 15:17 UTC (permalink / raw)
To: ruby-core
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/
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2022-12-05 15:18 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
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 ` [ruby-core:111212] " zverok (Victor Shepelev)
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).