From: "matz (Yukihiro Matsumoto)" Date: 2012-07-14T17:07:47+09:00 Subject: [ruby-dev:45954] [ruby-trunk - Bug #6195][Rejected] String#[] に逆順の Range を渡した場合の挙動 Issue #6195 has been updated by matz (Yukihiro Matsumoto). Status changed from Assigned to Rejected 本人も取り下げたようなのでリジェクトします。 Matz. ---------------------------------------- Bug #6195: String#[] に逆順の Range を渡した場合の挙動 https://bugs.ruby-lang.org/issues/6195#change-28057 Author: mrkn (Kenta Murata) Status: Rejected Priority: Normal Assignee: matz (Yukihiro Matsumoto) Category: core Target version: 2.0.0 ruby -v: ruby 2.0.0dev (2012-03-23 trunk 35121) [x86_64-darwin11.3.0] 以下のように 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 が返るべきじゃないかと思います。 -- http://bugs.ruby-lang.org/