理解できていないので勉強中です。
- 遅延評価ではないが、似たような動きをする。
- 以下のように宣言をする。これだとStringもStringが戻り値の関数も渡すことができる。
def test(x : => String)
書籍のP180のコードに手を加えた物を書きます。
val assertionsEnabled = true
def byNameAssert(predicate : => Boolean) = {
if (assertionsEnabled && !predicate)
throw new AssertionError
else true
上記のように定義し、以下の呼び出しをします。
println(byNameAssert(3 > 1))
以下のように出力されます。
true
次に式ではなくBoolean値を渡してみます。
try {
byNameAssert(false)
} catch {
case ex : AssertionError => println("assert error")
}
以下のように出力されます。
assert error
最後に以下のようにtrueを返す関数を宣言してbyNameAssertに渡してみます。
def returnTrueValue(x: String) = true
出力は以下になります。
true
名前渡しの形式にすることで、条件式も普通の値も関数値も渡せることが確認できると思います。
最終更新:2013年10月07日 22:43