Project

General

Profile

Bug #6195

String#[] に逆順の Range を渡した場合の挙動

Added by mrkn (Kenta Murata) over 8 years ago. Updated about 8 years ago.

Status:
Rejected
Priority:
Normal
Target version:
ruby -v:
ruby 2.0.0dev (2012-03-23 trunk 35121) [x86_64-darwin11.3.0]
Backport:
[ruby-dev:45429]

Description

以下のように String#[] に対して、範囲の開始インデックスが文字列の長さ以下の値である逆順の Range (beg > end) を渡した場合に空文字列が返ります。

"1"[1..0] #=> ""
"1"[1..-1] #=> ""
"123"[2..1] #=> ""
"123"[2..-2] #=> ""

一方、範囲の開始インデックスが文字列の長さより大きい場合は nil が返ります。

"1"[2..0] #=> nil
"1"[2..-1] #=> nil
"123"[4..1] #=> nil
"123"[4..-2] #=> nil

この挙動の違いは、rb_range_beg_len の実装に起因しています。
文字列のインデックスが昇順のみである仕様を考慮すると、上記前者の場合も nil が返るべきじゃないかと思います。

Also available in: Atom PDF