From: EGUCHI Osamu Date: 1999-12-31T11:00:54+09:00 Subject: [ruby-dev:8787] Re: [REQ] Array#each{|a,b,...|}, Array#shift/pop(num) えぐち@エスアンドイー です。 >>> 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 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 が使われた場合 [] とみなす」 というのは、今後一般に適用される事ですか? えぐち