From: EGUCHI Osamu Date: 1999-10-13T12:14:51+09:00 Subject: [ruby-dev:7994] Re: [patch] Array#delete_at w/ minus value えぐち@エスアンドイー です。 >>> In message [ruby-dev:7991] Re: [patch] Array#delete_at w/ minus value On Wed, 13 Oct 1999 11:23:28 +0900, matz@netlab.co.jp (Yukihiro Matsumoto) said: matz> まつもと ゆきひろです matz> matz> In message "[ruby-dev:7985] [patch] Array#delete_at w/ minus value" matz> on 99/10/12, EGUCHI Osamu writes: matz> matz> |負のインデックスを Array の delete_at の引数に matz> |使えるようにしてみました。 matz> matz> これ良いですね。1.5系で取り込みましょう。 おねがいします。 ところで、一晩寝たらいろいろ思い付いたのですが。 + array[begin..end], array[begin, length] に対応する array.delete_at(begin..end), array(begin, length) も組合せ的には、意味ありげですね。 + あと nil のような特殊な変数(定数?) void を導入して。 * void を代入すると対応する要素削除 * 範囲外の要素の参照で void を返す と言う仕組みを考えてみました。 a = ["a", "b", "c", "d", "e"] a[3] = void p a => ["a", "b", "c", "e"] a[1..2] = void p a => ["a", "e"] p a[100] => void []= nil と compact! の組合せでも可能ですが、 本当に nil を入れておきたいケースと両立しません。 また現状、範囲外の要素への参照は nil ですが、 これを void とすると nil と識別でき良いと思います。 void == nil => false ですが、 if void then "True" else "False" end) => "False" のつもりです。(3つめの「偽」と言う事です) 要素の削除と範囲外の参照の対象は、Array と Hash を考えています。 えぐち a[1..4] = None a.delete_if() {|e| e == None } で可能ですが、、、