スカラに無限ループのための機能的な代替手段はありますか?スカラの無限ループへの代替
while(true) {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
}
スカラに無限ループのための機能的な代替手段はありますか?スカラの無限ループへの代替
while(true) {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
}
ことの一つは、Stream.continually
のような高階関数を使用し、それをペアリングされましたfor
理解度:
import scala.util.Random
import scala.collection.immutable.Stream.continually
def rollTheDice: Int = Random.nextInt(6) + 1
for (n <- continually(rollTheDice)) {
println(s"the dice rolled $n")
}
この例自体は、非参照的に透過的なnextInt
メソッドのために純粋に機能的ではありませんが、副作用を使用するのではなく関数の構成について考えるのに役立つ可能性のある構造です。
あなたは、私は無限の末尾再帰を推測再帰的
@tailrec
def loop(): Nothing = {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
loop()
}
を行うことができます:あなたが行うことができます
@tailrec
def loop(): Nothing = {
if (condition) {
// Do something
} else {
Thread.sleep(interval);
}
loop()
}
私は['Nothing'](http://scala-lang.org/api/current/scala/Nothing.html)がもっと適切なタイプだろうと思います。 ['Unit'](http://scala-lang.org/api/current/scala/Unit.html)は値を返さないものの型です。 'Nothing'は返さないものの型です。 –
私は['Nothing'](http://scala-lang.org/api/current/scala/Nothing.html)がより適切なタイプだと思います。 ['Unit'](http://scala-lang.org/api/current/scala/Unit.html)は値を返さないものの型です。 'Nothing'は返さないものの型です。 –
@JörgWMittagなぜ "何も返さない"のは何ですか?私が理解しているのはちょうどボトムタイプです。 –
ボトムタイプは値なしのタイプです。 (単一の一意の値を持つユニットタイプとは対照的に) –