"Scala for the Impatient"の途中で私は自分自身が不思議に思っていました:シーケンスなしでループのためにScalaを使用できますか?シーケンスのないスケーラのループの場合は?
たとえば、Integer.MAX_VALUEを超えて増やすことができないカウンタオブジェクトを作成するよう練習しています。私のソリューションをテストするために、私は次のコードを書いた:
var c = new Counter
for(i <- 0 to Integer.MAX_VALUE) c.increment()
これはエラーをスローする:シーケンスはInt.MaxValue以上の要素を含むことはできません。 それは、Scalaが0からInteger.MaxValueまでの値を持つシーケンスオブジェクトを最初に割り当てて配置してから、そのシーケンスオブジェクトに対してforeachループを実行するということです。
私は私が代わりにこれを行うことができることを実現:
var c = new Counter
while(c.value < Integer.MAX_VALUE) c.increment()
しかしための文でループのための伝統的なCスタイルを実行する方法はありますか?
うわー、挑戦的な答えですが、良いものです。私はScalaを学んでいるだけなので、あなたはほとんど慣れていない言葉をたくさん使いましたが、感謝します。 –
'fromTo'の定義は、' Stream'(または 'Iterator')コンパニオンオブジェクトに対して' iterate'メソッドを使うことでさらに単純化できます。 'def fromTo(from:Int、to:Int)= Stream.iterate(from、to-from)(_ + 1)'の行に沿ったものです。しかし、「to to to」を使用することは、より慣用的であり、同じことを達成する。 –