From: keiju@... (=?ISO-2022-JP?B?GyRCQFBETTc9PHkbKEI=?=) Date: 2005-12-01T02:20:57+09:00 Subject: [ruby-dev:27906] Re: Numeric とComplex けいじゅ@いしつかです. In [ruby-dev:27898] the message: "[ruby-dev:27898] Re: Numeric と Complex", on Nov/30 22:59(JST) Yukihiro Matsumoto writes: >まつもと ゆきひろです >|(1) "a" <= s and s <= "z" >|(2) Range("a", "z").include?(s) >|は同じではないんですね? > >そうなりますね。そのような動作をするメソッドも用意するつもり >ですが(名前が...)。 >|case s >|when "a".."z" >|は(1)の動作を期待する人が続出しそうですが? > >これは(たまたま)動作します。 そうか, Range#=== のていぎですからね. >どうするのが一番良いかはなかなか >悩ましいところです。 うーん. 現行文字列の時には, 順序の定義が2つあるわけですよね. * 辞書式順序 String#<=> * succ式順序 String#succ 文字列として扱っているときには, 特に問題は発生してないわけですが, # ほんとうは, succから <=>を定義できるので矛盾していますが... Rengeを考えたときには, その矛盾が鮮明になる. つまり, Range(st1, st2) が Range(st1, st2, :<=>) なのか, Range(st1, st2, :succ) の意味なのか? で, 現行は * 辞書式順序 Range#===, Range#include? * succ式順序 Range#each で, これを, * 辞書式順序 Range#=== * succ式順序 Range#each, Range#include? にしたいってことなんですね? でも, 辞書式順序では * 辞書式順序 Range#===, Range#include? は意味があるし, よく使うと思いますし, succ式順序でも * succ式順序 Range#each, Range#include?, Range#=== は意味があると思います. ですので, 1つのクラスで両方を表現しようとするのが無理があるのでは? それに, 順序はsortと同じように<=>/succ決まらないわけでもないので, たとえば, 2つのクラス class Range class EnumerableRange> 石塚 圭樹 <<--- ---------------------------------->> e-mail: keiju@ishitsuka.com <<---