えぐち@エスアンドイー です。

>>> In message [ruby-dev:8782] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)
    On Thu, 30 Dec 1999 23:46:38 +0900, matz / netlab.co.jp (Yukihiro Matsumoto) said:

matz> まつもと ゆきひろです
matz> 
matz> In message "[ruby-dev:8779] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num)"
matz>     on 99/12/30, EGUCHI Osamu <eguchi / shizuokanet.ne.jp> writes:
matz> 
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> という問題はちょっとヤな感じですね。

同じクラスの同じメソッドが、状況によって違うクラスを返す事は、
稀ですがありますが、この場合がやしかに「ヤな感じ」ですね。
はっきり区別された名前が必要だと言う事でしょうけど。

matz> |keyword 引数が実現されたら、
matz> |
matz> |  x = ary.delete(last: 3)    # 最後3つを削除、それを要素とする配列をかえす。
matz> |  ary.delete(at: 10)         # ary.delete_at(10) と同義
matz> |
matz> |なんて事ができますか?
matz> 
matz> 原理的には可能でしょう。ただ、このようなある種文法を持つよう
matz> なキーワードの使い方が妥当かどうかはまだ不明です。実際にキー
matz> ワード引数が使えるようになって、いろいろ経験を積むことでどの
matz> ような使い方が良いのか分かってくるのではないでしょうか。

キーワード引数の用途としては、ちょっと変な例だったかもしれませんが、

  ary.delete_first(), ary.delete_last(),  ary.delete_range() ...

の様に組合せが無数に出来る、多くのメソッドよりとどちらがいいか
と言うのは、微妙な所だと思います。
#そんなに直行的に機能をテンコモリにしなくてもいいと言う話も...^^;;;

matz> しかし、その前にこの殺人的なスケジュールをなんとかしないと。
matz> 正月休みもないぞ。

暮れに来て大変ですね。

matz> |matz>    ary.splice(0, 2, nil)
matz> |matz>    ary.splice(-3..-1, nil)
matz> |matz> 
matz> |matz> とか指定できた方が良いかなあ。
matz> |
matz> |あと、削除した位置に nil を残さない方が希望の動作なのでは、
matz> |#毎回 compact! するのも面倒でしょ (^^)
matz> 
matz> 内部で使っているreplaceはnilを[]と扱うようにしてますので、余
matz> 計なnilまで削除してしまいかねないcompact!は不要です。
matz> これが妥当かというのは議論の余地があるのですが。

あぁ、それで nil を [] とみなしているんですね。
#うぅむ、 Lisp みたいだぁ。

「配列が期待される所に nil が使われた場合 [] とみなす」
というのは、今後一般に適用される事ですか?

	えぐち