青山です。

Tue, Mar 09, 1999 at 09:25:20AM +0900 において
Tadayoshi Funaba さん曰く:

> 通過駅をどう考えるか、ということもありますが、僕はあくまでも、10..1 は、
> 大きさが  0 になると考えたいです。これが大きさ 10 だと言えるなら、方向
> も自ずと決まるという話になります。そうすると、別個に step に正負がある
> というのはヘンに思うんですけど。
>
> もちろん、Range の大きさと、歩数とは関係ないということもできるかもしれ
> ないですけど、それでは大きさの意味がないです。

大きさ 0 はちょっと無理があると思います。距離でも角度でも重量、面積、
速度、時間、等々、どの場合も Range が 0 というのは違和感がありますから。
そして、どの場合も正負両方向の参照が存在するのは自然だと思われます。

> このあたり、よくわからないのですけど、Range が step を利用しないことも
> あるんですか? で、その場合は max..min の挙動が変る?

ruby-dev:6096
> max..min を許容する場合 step を省略した場合の方向を a-->b とし、step
> の絶対値を 1 という感じです。(step が省略された場合は a 始点 b 終点の
> 鈍行という感じ)

という事で、step を省略した場合というのは for i in a..b のような場合です。
方向を明示する場合は for i in (a..b).step(n) という感じですね。

> チェックせずに、おまかせにするのが良くないといわれますが、それは違うと
> 思いますよ。それも含めて論理を決めているんですよ。それを捨てるのは決定
> 的な違いで、 今現在の仕様からいっても、 僕の考えでも、10..1 を 10,9..1
> のように解釈してもらおうとするほうが、望ましくないと思います。オマカセ
> せずに、 upto、downto、step などを直接につかうべきでしょう。良い方向で
> の不便さとは思いません。

この件に関しては max..min についての結果が出た後でと思います。a..b に
とって a < b が必要条件であるかどうかという結果が出ない限りはそれに関
する挙動は決められませんから。

> なんでもかんでも each を基本にしているのでは不足ではないか、という議論を
> 思いだしていました。

おお、なるほど。そのような議論もありましたか。ですが、これもまた今回の
場合とは異なると思われます。Enumerable は機能拡張の為の Mixin であり、
Enumerable というオブジェクトを生成する為のクラスではありませんから。

> いや、それは違うんじゃないですかね。マニュアルに書いてあるし、それを信
> じて、クラスを書いている人もいます。

これは現在の事ですよね。step が導入された場合は当然ながら変更される事
になります。


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