Siena. です。

▼ [ruby-list:35290] Yukihiro Matsumoto さん

》|Timeは「秒が単位(マイクロ秒は補助的)」という定義がありますか|1 時間とか 1 日といった、もっと大きな刻み幅を単位に進む|時刻表現系が欲しいなど、場面によって様々だと思います。|それは、Time ではなく Date であるという事でしょうか。
》
》1日の場合にはそうなりますね。というか、適切な幅がわからないと思う人は暗黙の幅を仮定するRangeは使えない(使わない)んじゃないですかね。

そうですね。実際、あたしはそれに該当します。
Range を連続した整数の集合として以外、ほとんど使っていません。
使う場面が非常に限定されてしまっていて、いろいろ使えそうなのに、
使えないと切り捨ててしまうのはもったいないとも思っています。
ですので、改善なり別の手段なりを模索できたらいいなと。

Range#step は 1.7 feature ですし、(float..float) など、
整数以外を与えた時の挙動が不安という事も使わない
(or 使いにくいと感じてしまう) 理由だと思います。
かといって、今のままの Range ですと Float などを
扱うようにするのも何か違うような気がしています。

》「刻み幅を変える」っていうのは一見便利そうなんですが、実は使えないと思います。Timeのようなのは状態が増えれば増えるほど使いにくいですから。現状のデフォルトの表示タイムゾーンという状態でも使いにくい場合がままあるのに、これ以上増えたら。

時刻関係のものは特にそうですね。ただでさえややこしいので ^^;
succ は置いておいて、Range の特性として刻み幅を持たせるとか、
メソッド引数に刻み幅を与えるとかでも良いかもしれません。


》|Rangeは「数え上げられる範囲」が主ですが、「ここからここまで」|という範囲を表現する場合もありえるからです。Rubyでは目的によっ|確認しておきたいのですが、Range は、「数え上げられる範囲」と|「連続区間」の両方を表現すべく導入されたものでしょうか。|それとも、基本的に「数え上げられる範囲」であって、便宜的に|「連続区間」としても機能する場合があるというものでしょうか。||あたしは、後者の立場で捉えていまして、「連続区間」|としての側面を強く支持するのには少々抵抗を感じます。
》
》後者です。「強く支持する」つもりはないんですけど。

なるほど。予想していたとおり後者でしたので安心しました。
前者であるとするには現状の Range は違うなぁ、
と思っているというだけですので、まつもとさんが
「強く支持」しているというつもりはありませんでした。

# なんか、いろいろ強弁しているように見えますね。気を付けよう....

》|Range のあるべき姿が前者だとしますと、「連続区間」らしく挙動を|拡充する予定がある、もしくは拡充する事に問題はないでしょうか。
》
》いや、べつに拡充しなくても。

もし前者であるならば、よりそれらしくすべきだと思い、
それならこれらを拒否するという事があるのかな、というのを
確認したかっただけですので、あまり気にしないでください。

》||少なくとも #to_a は妥当な定義が与えられないような気がします。||「連続な区間を表現する場合には有意義な結果は与えられない」と|いうのは妥当な定義だと思います。||それって、妥当なのでしょうか。|連続区間から 0.5 刻みで値を列挙したいとか、極端な話、ブロックで|与えられるある条件を満たす値を列挙したいとかいう要求がありそうです。
》
》ニーズはいろいろあると思いますが、それをすべて満たすメソッドを提供するかどうかは別問題です。というか、想定される全部のニーズを盛り込んだら破綻しちゃう。でも、「ブロックで与えられるある条件を満たす値を列挙」はselectでできるか、離散区間なら。

別問題、という指摘には同意します。ブロック云々は
あくまでも極端な話として出しているので置いておきますが、
刻み幅を指定できるくらいはできてもいいように思います。
それを Range (or another) が担うのか #succ が担うのかはともかく。

---
Siena. <mailto:siena / cr.chiba-u.ac.jp>