まつもと ゆきひろです

In message "[ruby-list:10346] negative index of an array"
    on 98/10/26, Motoyuki Kasahara <m-kasahr / sra.co.jp> writes:

|笠原です。
|
|Array クラスにはインデックスの表現に start..end や start, length が使
|えるメソッドがありますが、start, end がともに負で、かつ両方とも `配列
|の長さ * (-1)' よりも小さいときのときの挙動がどうもよく分かりません。

では説明を試みます.その後ドキュメントにどう反映するかを考え
ましょう.

  * start or endが負の時には「配列の長さ+(start or end)」と
    みなします

  * さらに「配列の長さ+(start or end)」がまだ負の時には0とみ
    なします.

|メソッドの使い方としては、かなり意地悪な部類に入りますので、未定義なら
|未定義でも良いのですが、もし法則があるとしたら、どうしてこのような結果
|になるのでしょうか。

|	a = ['a', 'b', 'c']
|	a[-6..-5] = ['X', 'Y']    # a => [X, Y, a, b, c]

        a[0, 0] = ['X', 'Y']

とみなします.

|	a[-6, 2] = ['X', 'Y']     # a => [X, Y, c]

        a[0, 2] = ['X', 'Y']

|	a.fill('X', -6..-5)       # a => [a, b, c]

        a.fill('X', 0, 0)

|	a.fill('X', -6, 2)        # a => [X, X, c]

        a.fill('X', 0, 2)

|`self[start..end] = val' のときの挙動はある意味で期待通りなのですが、
|それ以外はよく分かりません。

これで少し分かりましたか?
                                まつもと ゆきひろ /:|)