青山です。

Mon, Mar 08, 1999 at 09:17:33PM +0900 において
Tadayoshi Funaba さん曰く:

> あくまで、point to point の考えに忠実になれば、 大きさも変らないハズで
> すが、そうなると、方向があること自体がおかしいと、いうことにならないで
> しょうか。

引続き電車で例えると、各駅停車(step 1)と特急(step 10)では駅の数
(to_a.size)は変わりますが、これは駅の数(参照点)が変わるだけであり、距
離(size)が変わるわけではありません。そして、方向については上り(step 正)
と下り(step 負)が有り得ると思われます。Range の大きさについては差その
ものではなく、その絶対値とするのが適切と思われます。

> あと、このインターフェイスだと、step でもよさそうですが、 文字列のこと
> を考えると、next はなかなかシックリくるなあ、という気もしてます。

文字列についてはいろいろと難しいですね。a-->z にしてもこれが適切とは限
りませんし。(正規表現の \w も locale によって a-z 以外に対応している言
語もありますし)

> その喩えはよくわかります。そういう考えもアリだとは思います。ただ、upto
> の前堤を手放すのは、慎重にしたほうがよさそうですね。

step を利用しない限りは max..min の挙動が変わるだけですから、過去との
互換性を持つ書き方をするには a < b のチェックを入れる程度になると思わ
れます。これは a < b のチェックせずにおまかせにする方が良くない書き方
と思われるので、良い方向での不便さでしょう。

> # この話は Enumerable と each にまつわる議論ともよく似ていると思う。

Enumerable の場合は each で実現出来る機能はどんどん採り入れてしまって
OK と思われますが、Range の場合は upto で実現出来るからといってそれが
Range にふさわしいとは限りません。

Enumerable は each 依存ですが、Range は upto 依存ではなく、単に Range
の実装に upto が利用されているというだけの関係と思われます。


-- 
青山 和光 Wakou Aoyama <wakou / fsinet.or.jp>