From: Shin-ichiro HARA Date: 2005-12-01T17:04:58+09:00 Subject: [ruby-dev:27915] Re: Numeric とComplex 原です。 In [ruby-dev:27914] >|でも、やっぱり >| >| case ch >| when "a" .. "z" >| >|と書くと、比較的高速にchでの分岐を与えてくれているというイメー >|ジがあるので、そこでsuccが何度も呼ばれているというのは、気持 >|ち悪い気がします。 > >それは実装のことなんで気にしない、と。 そーゆーもーのーなーのーかー。 >問題は数でないオブジェクトの範囲です。特に文字列については >succで得られる要素で表現される集合と、両端の要素の辞書的比較 >で表現される集合が異なるため、どちらを選んでも他方に不満が出 >るでしょう。で、これを解決する方法はわからない、と。いや、完 >全な解決は無理なんですが、せめて使い分けられる方法があれば、 >と。 やっぱり別のクラスですかね。 In [ruby-dev:27909] > * Rangeは../...演算子で作られるがそれはどっちなの > * どちらかを追い出すとして、それはどっち > * 新設するクラスの名前は > * 残るクラスの各メソッドはどう振る舞うのか > >などを全部決めないといけないので頭の痛い話です。 こういうのは? * ../...は(互換性から)Range を生成。 * Range#eachはsuccで反復する。 * 新設するクラスの名前はRegion。Rangeとの継承関係なし。 * Regionではinclude?, ===は不等号で決める。 * Region#each,stepはRange#each,stepにほぼ準ずる。 * Region(a, b, "<")左に開、Region(a, b, "<>")左右に開、 などのオプションあり。 * Region(a, nil)、Region(nil, b)など半無限領域もあり。 * ComparableとNilClassにRegionを生成するメソッドupto(ブ ロック無し)を新設。(case 〜 when "a".upto "b" 〜と書 ける。) "a".upto("b"){}と"a".upto("b").each{}の違いが微妙。 RangeとRegion、名前が似てて機能も似すぎ。かな?