前田です。 Masatoshi SEKI <m_seki / mva.biglobe.ne.jp> writes: > > collect > > select(->find_all) > > detect(->find) 僕もこのaliasはあった方がよいと思います。 Smalltalkerにselect:はないの?と訊かれてfind_allを使ってね、 と説明する必要がなくなるので。 # もっともまわりにSmalltalkerがいないのでそんなこと訊かれた # ことはないのですけれど;-) > > を用意してたんですけど,injectとか見るにいたって(というのは > > 冗談ですが),日本人にはよく分からんとか思ってなくしちゃった > > んですよね. inject:into:がわかりにくいのは名前のせいだけではないという気も します(^_^; > > 関数メソッドのselectとの名称重複もちょっと気になっ > > たし.複数の方がこれで良いとおっしゃるのなら,復活させても構 > > いません. Arrayを継承したクラスを作る時にはまるかもしれませんね。 # Kernel::selectとすれば済む話ではありますが。 それはさておき本題の方を。 > collect, find_all とちょっと似ている delete_if について > 教えて下さい。 (snip) > となります。ブロックの値が true の要素を削除するんだと > 思っていたのですが、nilでもtrueでも削除されるようです。 > # というか、falseを返したときだけ削除されない > > if と同じ挙動の方がわかりやすい気がしますが、 > そういうものなんでしょうか? おそらくバグだと思われます。 # まだRTEST忘れのバグが残ってたのですね。うーむ。 --- array.c~ Tue Jan 26 19:08:08 1999 +++ array.c Sat Jan 30 00:08:23 1999 @@ -1007,7 +1007,7 @@ rb_ary_modify(ary); for (i1 = i2 = 0; i1 < RARRAY(ary)->len; i1++) { - if (rb_yield(RARRAY(ary)->ptr[i1])) continue; + if (RTEST(rb_yield(RARRAY(ary)->ptr[i1]))) continue; if (i1 != i2) { RARRAY(ary)->ptr[i2] = RARRAY(ary)->ptr[i1]; } -- 前田 修吾 (mailto:shugo / netlab.co.jp)