まつもと ゆきひろです

In message "[ruby-list:35283] Re: ((1.2)..(3.4)).to_a"
    on 02/05/28, Siena. <siena / cr.chiba-u.ac.jp> writes:

|Timeは「秒が単位(マイクロ秒は補助的)」という定義がありますか
|ら、それほど問題ではないと思います。
|
|はい、内部表現を根拠に Time#succ は 1 秒刻みとする
|というのが体系的に妥当である、という点は異議ありません。
|ただ、あたしとしては、あまり使い道を思い浮かばないです。
|1 時間とか 1 日といった、もっと大きな刻み幅を単位に進む
|時刻表現系が欲しいなど、場面によって様々だと思います。
|それは、Time ではなく Date であるという事でしょうか。

1日の場合にはそうなりますね。というか、適切な幅がわからない
と思う人は暗黙の幅を仮定するRangeは使えない(使わない)んじゃ
ないですかね。

|Time#succ では、「刻み幅は 1 秒に固定」というあまり
|使われなそうな定義を与えておくか、使う側に歩み寄って
|生成時引数やメソッドで刻み幅を変えられるようにしておくのか、
|その場合はデフォルトは 1 秒で良いのか、というところで、
|どれが適切なのかはあたしには難しいです。
|# 悩んだ挙句、後者でデフォルトを 1 秒としたいかな...

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

|Rangeは「数え上げられる範囲」が主ですが、「ここからここまで」
|という範囲を表現する場合もありえるからです。Rubyでは目的によっ
|
|これは、中途半端にそうなっているように感じます。
|Range#=== で ( 1..3 ) === 1.5 が true となる事を
|指していると思うのですが、これしか思い当たりません。
|他に「連続区間」としての挙動はあるでしょうか。
|
|確認しておきたいのですが、Range は、「数え上げられる範囲」と
|「連続区間」の両方を表現すべく導入されたものでしょうか。
|それとも、基本的に「数え上げられる範囲」であって、便宜的に
|「連続区間」としても機能する場合があるというものでしょうか。
|
|あたしは、後者の立場で捉えていまして、「連続区間」
|としての側面を強く支持するのには少々抵抗を感じます。

後者です。「強く支持する」つもりはないんですけど。

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

いや、べつに拡充しなくても。

||少なくとも #to_a は妥当な定義が与えられないような気がします。
|
|「連続な区間を表現する場合には有意義な結果は与えられない」と
|いうのは妥当な定義だと思います。
|
|それって、妥当なのでしょうか。
|連続区間から 0.5 刻みで値を列挙したいとか、極端な話、ブロックで
|与えられるある条件を満たす値を列挙したいとかいう要求がありそうです。

ニーズはいろいろあると思いますが、それをすべて満たすメソッド
を提供するかどうかは別問題です。というか、想定される全部のニー
ズを盛り込んだら破綻しちゃう。でも、「ブロックで与えられるあ
る条件を満たす値を列挙」はselectでできるか、離散区間なら。

                                まつもと ゆきひろ /:|)