Bug #11406
closedInconsistent behavior when creating a range of strings which end in an integer greater than 10
Description
Steps to Reproduce¶
In Ruby v2.2.2
-
Create a range of strings using 'foo1' up to 'foo9':
('foo1'..'foo9').to_a => ["foo1", "foo2", "foo3", "foo4", "foo5", "foo6", "foo7", "foo8", "foo9"]
Observe the results are as we expect
-
Create a range of strings using 'foo1' up to 'foo10'
('foo1'..'foo10').to_a => ["foo1", "foo2","foo3","foo4","foo5", "foo6", "foo7", "foo8", "foo9", "fop0","fop1", "fop2", "fop3", "fop4", "fop5", "fop6", "fop7", "fop8", "fop9", "foq0", ....]
Also:
('foo1'..'foo10').to_a.size => 4707939
Observe that the output loops
1..9
about 523104 times (arbitrarily?)
Expected Results¶
The output in step 1 makes me expect for Ruby's range class to intelligently create ranges using a strings that include integers inside them. However this only seems to work for 1..9
ranges.
Actual Results¶
Inconsistent behavior for range creation.
Files
Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
- Description updated (diff)
It's not inconsistent, but derived from the behavior of String#succ
.
p "foo9".succ #=> "fop0"
And it ended with "zzzz9", or exceeds the length of "foo10".
I agree that the current behavior is less convenient in such cases.
Updated by Hanmac (Hans Mackowiak) almost 10 years ago
i think that might break some things ... (it might break some applications)
like with "1.2.9".succ, i dont know if that still work
Updated by nobu (Nobuyoshi Nakada) almost 10 years ago
Hans Mackowiak wrote:
i think that might break some things ... (it might break some applications)
like with "1.2.9".succ, i dont know if that still work
String#succ
isn't changed at all with my patch, but only String#upto
when the receiver and the limit share common prefix and numerical suffixes.
The case affected is that alphabetical part is followed by the numerical suffix.
E.g.,
"1a2b9".upto("1a2b10").to_a
returns an empty array now, but ["1a2b9", "1a2b10"]
with this patch.
In other words, your example has been handled specially already.
Updated by jeremyevans0 (Jeremy Evans) almost 6 years ago
- Status changed from Open to Closed