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) over 9 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) over 9 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) over 9 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) over 5 years ago
- Status changed from Open to Closed