なかだです。

At Fri, 31 Dec 1999 11:00:54 +0900,
EGUCHI Osamu <eguchi / shizuokanet.ne.jp> wrote:
> matz> |matz> 語彙については「できないもの」に比べて優先度が下がる傾向があ
> matz> |matz> ります。特に曖昧でない名前が必要です。pop(3), shift(3)がそう
> matz> |matz> かというと少し躊躇があります。
> matz> |matz> 
> matz> |matz> いや、そんなに悪いとも思わないんですけどね。
> matz> 
> matz> まあ、[ruby-dev:8773]で中田さんが指摘された
> matz> 
> matz>   popは要素を返すが、pop(n)は配列を返す
> matz> 
> matz> という問題はちょっとヤな感じですね。
> 
> 同じクラスの同じメソッドが、状況によって違うクラスを返す事は、
> 稀ですがありますが、この場合がやしかに「ヤな感じ」ですね。
> はっきり区別された名前が必要だと言う事でしょうけど。

  配列は多重代入などで特別扱いされることが多いからだと思うんです
が。

  とりあえずの Array#splice でも。一応 Perl の splice に合わせた
つもりなんですが、Perl をよく覚えてなかったりするので自信なし。
# 最近の Perl にゃ Thread まであるとは。

class Array
  def splice(pos, *values)
    case pos
    when Range
      len = nil
    when Array
      pos, len = pos
    else
      len = values.shift
    end
    if len
      result = self[pos, len]
      self[pos, len] = values
    else
      Range === pos or pos = pos..-1
      result = self[pos]
      self[pos] = values
    end
    result
  end
end

-- 
そうだ 強気に ちょっと インチキに☆彡
    中田 "Bugるくらいがちょうどいいかも;-)" 伸悦