まつもと ゆきひろです 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' のときの挙動はある意味で期待通りなのですが、 |それ以外はよく分かりません。 これで少し分かりましたか? まつもと ゆきひろ /:|)