2017-06-29 5 views

答えて

4

ことの一つは、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メソッドのために純粋に機能的ではありませんが、副作用を使用するのではなく関数の構成について考えるのに役立つ可能性のある構造です。

6

あなたは、私は無限の末尾再帰を推測再帰的

@tailrec 
def loop(): Nothing = { 
if (condition) { 
    // Do something 
    } else { 
    Thread.sleep(interval); 
    } 
    loop() 
} 
+2

私は['Nothing'](http://scala-lang.org/api/current/scala/Nothing.html)がより適切なタイプだと思います。 ['Unit'](http://scala-lang.org/api/current/scala/Unit.html)は値を返さないものの型です。 'Nothing'は返さないものの型です。 –

+0

@JörgWMittagなぜ "何も返さない"のは何ですか?私が理解しているのはちょうどボトムタイプです。 –

+1

ボトムタイプは値なしのタイプです。 (単一の一意の値を持つユニットタイプとは対照的に) –

3

を行うことができます:あなたが行うことができます

@tailrec 
    def loop(): Nothing = { 
    if (condition) { 
     // Do something 
    } else { 
     Thread.sleep(interval); 
    } 
    loop() 
    } 
+1

私は['Nothing'](http://scala-lang.org/api/current/scala/Nothing.html)がもっと適切なタイプだろうと思います。 ['Unit'](http://scala-lang.org/api/current/scala/Unit.html)は値を返さないものの型です。 'Nothing'は返さないものの型です。 –