小田@QNES です。

私の場合、次のように考えています。
 start( or end) の値がマイナスの場合は、0 とみなされる
 ただし、start..end で、end が 0 の場合は、挿入。

ですから、こんなことも出来るようです。
   self[start..end] = val の場合:
	a = ['a', 'b', 'c']
	a[2..-5] = ['X', 'Y']    # a => [a, b, X, Y, c]
	( = a[2..0] とおなじ)

でも、-1 の場合は、扱いが違うようです。
 -1 は最後までの意味のようですね。

---
On Mon, 26 Oct 1998 19:16:26 +0900
Motoyuki Kasahara <m-kasahr / sra.co.jp> wrote:

> 笠原です。
> 
> Array クラスにはインデックスの表現に start..end や start, length が使
> えるメソッドがありますが、start, end がともに負で、かつ両方とも `配列
> の長さ * (-1)' よりも小さいときのときの挙動がどうもよく分かりません。
> 
> メソッドの使い方としては、かなり意地悪な部類に入りますので、未定義なら
> 未定義でも良いのですが、もし法則があるとしたら、どうしてこのような結果
> になるのでしょうか。
> 
>    self[start..end] = val の場合:
> 	a = ['a', 'b', 'c']
> 	a[-6..-5] = ['X', 'Y']    # a => [X, Y, a, b, c]

a[0..0] となり、0番目から、値の挿入。
 
>    self[start, length] = val の場合:
> 	a = ['a', 'b', 'c']
> 	a[-6, 2] = ['X', 'Y']     # a => [X, Y, c]

a[0,2] となり、0番目から、値の置換。
 
>    fill(val, start..end) の場合:
> 	a = ['a', 'b', 'c']
> 	a.fill('X', -6..-5)       # a => [a, b, c]

a.fill('X', 0..0) となり、0番目から0個を埋めようとして
結果的に、値変わらず。
 
>    fill(val, start, length) の場合:
> 	a = ['a', 'b', 'c']
> 	a.fill('X', -6, 2)        # a => [X, X, c]

a.fill('X', 0, 2) となり、0番目から2個を置換。

と考えると、その通りになってませんか?

∪*****/\*****\/*****/\*****∪
  Koji Oda  NEC Software Kyusyu
  1st Development Department
   Based Software Division
  E-Mail:oda / bsd1.qnes.nec.co.jp
∩*****/\*****\/*****/\*****∩