この(=> Int)
は、名前で呼び出されたときにのみIntと評価されるコードブロックと呼ぶことができます。
code: => T
nameパラメータで呼び出し
def repeat[T](code: => T)(times: Int): List[T] = {
(1 to times).toList.map {_ => code }
}
は、上記のコードスニペットを考えてみています。上記の関数内のは、Tと評価される任意の式または式のグループを受け入れることができます。コードブロックは、名前で呼び出されたときにのみ評価されます。名前で
ScalaのREPL
scala> repeat { println("hello") }(3)
hello
hello
hello
res2: List[Unit] = List((),(),())
scala> repeat { println("hello"); 1 }(3)
hello
hello
hello
res3: List[Int] = List(1, 1, 1)
scala> repeat(println("foo"))(1)
foo
res4: List[Unit] = List(())
コールを使用すると、マジックがあるため、コードブロックの遅延評価のそれが呼ばれるたびに発生したループ
def loop(cond: => Boolean)(codeBlock: => Unit): Unit = {
if (cond) {
codeBlock
loop(cond)(codeBlock)
} else()
}
のような面白いものを構築することができます名前で
Scala REPL
scala> def loop(cond: => Boolean)(codeBlock: => Unit): Unit = {
| if (cond) {
| codeBlock
| loop(cond)(codeBlock)
| } else()
| }
loop: (cond: => Boolean)(codeBlock: => Unit)Unit
scala> var i = 0
i: Int = 0
scala> loop(i < 10) { println("foobar"); i += 1}
foobar
foobar
foobar
foobar
foobar
foobar
foobar
foobar
foobar
foobar