2

(そしてなぜ)これは本当に例外的に禁止されるべきですか?

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)
4

1 に答える 1

8

(そしてなぜ)これは本当に例外的に禁止されるべきですか?

scaladocからの引用:

Range クラスは、範囲 [start;end) の整数値を表し、ステップ値 stepはゼロではありません。シーケンスのような振る舞いもします (長さをサポートし、含む)。

この制限は理にかなっています。ステップ サイズが 0 の範囲は常に無限であり、下限値だけで構成されます。無限の範囲が可能であると主張することもできますが (遅延評価)、範囲の上限の概念は不条理に受け止められます。ステップ 0 の rangeは、上限が重要でないため、無限に長くても、単純にrangeではありません。

したがって、単一の値の無限ストリームが本当に必要な場合、Scala は正当に、より明示的になるように強制します。

于 2010-07-26T11:27:18.263 に答える