by shigemk2

当面は技術的なことしか書かない

Scala 関数の引数で遅延評価を使う

概要

関数の引数は値渡しが基本であるが、名前渡しパラメータを使えば、 引数が必要になったタイミングで評価させる(=遅延評価)。

↓の例ではconditional部分が名前渡し引数となっている。

環境

Mac OS X 10.9.1

Scala 2.10.3

コード

Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_45).
Type in expressions to have them evaluated.
Type :help for more information.

scala> def myWhile(conditional: => Boolean)(f: => Unit) {
     |   println("myWhile")
     |   if (conditional) {
     |     f
     |     myWhile(conditional)(f)
     |   }
     | }
myWhile: (conditional: => Boolean)(f: => Unit)Unit

scala>

scala> var count = 0
count: Int = 0

scala> myWhile(count < 3) {
     | println("count=" + count)
     | count += 1
     | }
myWhile
count=0
myWhile
count=1
myWhile
count=2
myWhile

ぶんけん