Feature #6445

request for default length/position on string index

Added by bot pena almost 2 years ago. Updated over 1 year ago.

[ruby-core:45106]
Status:Assigned
Priority:Normal
Assignee:Yukihiro Matsumoto
Category:-
Target version:next minor

Description

would be nice if ruby has default for "rest or up to end of string"

eg

"hello"[2,] => should default to "hello"[2..-1]
or
"hello"[2..] => should default to "hello"[2..-1]

History

#1 Updated by Yusuke Endoh almost 2 years ago

  • Status changed from Open to Assigned
  • Assignee set to Yukihiro Matsumoto

Hello,

I created a patch that add a syntactic sugar from (arg..) to (arg..-1).

ary = [1, 2, 3, 4]
p ary[2..] #=> [3, 4]

Matz, what do you think?

diff --git a/parse.y b/parse.y
index 9f9093b..d272492 100644
--- a/parse.y
+++ b/parse.y
@@ -2168,6 +2168,18 @@ arg : lhs '=' arg
$$ = dispatch2(dot3, $1, $3);
%/
}
+ | arg tDOT2
+ {
+ /
%%%/
+ valueexpr($1);
+ $$ = NEW
DOT2($1, NEWLIT(INT2FIX(-1)));
+ if (nd
type($1) == NODELIT && FIXNUMP($1->ndlit)) {
+ deferred
nodes = listappend(deferrednodes, $$);
+ }
+ /
%
+ $$ = dispatch2(dot2, $1, INT2FIX(-1));
+ %/
+ }
| arg '+' arg
{
/
%%%*/

Yusuke Endoh mame@tsg.ne.jp

#2 Updated by Akinori MUSHA almost 2 years ago

It would look nice and work fine with indexing strings and arrays, but if it were put in you would've come to want (1..).each {|i| .. } to work as well.

It might be better to default the omitted end to +Infinity and then make {Array,String,..}#[] understand +Infinity as an index, I guess?

#3 Updated by Yutaka HARA over 1 year ago

  • Target version changed from 2.0.0 to Next Major

#4 Updated by Yutaka HARA over 1 year ago

  • Target version changed from Next Major to next minor

Also available in: Atom PDF