[ruby-list:492] Re: bugreports(Enum#find/find_all, ruby-mode.el) and Requests

From: matz@... (Yukihiro Matsumoto)
Date: 1996-09-11 01:47:36 UTC
List: ruby-list #492
まつもと ゆきひろです.

In message "[ruby-list:491] bugreports(Enum#find/find_all, ruby-mode.el) and Requests"
    on 96/09/10, Keiju ISHITSUKA <keiju@shljapan.co.jp> writes:
|
|けいじゅ@SHLジャパンです. 
|
|バグレポートとリクエストです.

いつもありがとうございます.

|1. Enumerable#find/find_all
|
|a = [1, 2, 3, 4]
|elm = a.find{|e|
|  e == 2 or e == 4
|}
|---
|TRUE

これは現在のEnum#findの仕様です.要素があった時に真,無かっ
た時に偽を返しています.要素には FALSE や nil が含まれること
もありえるので,見付かった時にそのオブジェクトを返す仕様では
「見付からなかった時」を示すことができないからです.

もっと良い仕様があれば変更しますけど(でも他との整合性から例
外を発生させるのは避けたい).

|a = [1, 2, 3, 4]
|elm = a.find_all{|e|
|  e == 2 or e == 4
|}
|---
|Segmentation Falt

こっちはバグです.簡単なタイプミスでした.

|2. ruby-mode.el
|
|?/ があるとインデントが狂うようです.

修正しました.ruby-mode.elは高速化のためにかなり変更したので
すが,変更後のものではこのパターンは無限ループに落ちて中断で
きないという凶悪なバグに成長していました.^^;;

|3. String#gsub!
|
|以下のはバグではありません.
|
|a = "abc"
|a.gsub!(/(a)b(c)/, $1 + "B" + $2)
|print a
|--
|B

|絶対バグだと思ったのですが, 良く考えてみるとおかしくないんですね. 間違
|いやすい例としてFAQにでもいれておいて下さい.

そうですね.値が入っていない時に $n の参照で例外を発生させる
という手はありますけど,嬉しくないかも知れませんね.

|4. Enum#max{...},min{...}
|
|Enumerableにはmax/minがありますが, sortと同じようにイテレータを受け付
|けるようにしてください.

しました.

|5. Enum#members(VAL) Enum#members(VAL){...}
|
|Enumerable#grepの == 比較版です. 

これってどういう時に使うんですか? なんかmembersってメソッド
名からは要素を全部配列にいれたもののような印象があるんですけ
ど.
                                まつもと ゆきひろ /:|)

In This Thread

Prev Next