(そしてなぜ)これは本当に例外的に禁止されるべきですか?
scala> val r2 = 15 until (10, 0)
java.lang.IllegalArgumentException: requirement failed
scala> new Range(10,15,0)
java.lang.IllegalArgumentException: requirement failed
at scala.Predef$.require(Predef.scala:133)
(そしてなぜ)これは本当に例外的に禁止されるべきですか?
scaladocからの引用:
Range クラスは、範囲 [start;end) の整数値を表し、ステップ値 stepはゼロではありません。シーケンスのような振る舞いもします (長さをサポートし、含む)。
この制限は理にかなっています。ステップ サイズが 0 の範囲は常に無限であり、下限値だけで構成されます。無限の範囲が可能であると主張することもできますが (遅延評価)、範囲の上限の概念は不条理に受け止められます。ステップ 0 の rangeは、上限が重要でないため、無限に長くても、単純にrangeではありません。
したがって、単一の値の無限ストリームが本当に必要な場合、Scala は正当に、より明示的になるように強制します。