我有一个lazy val
,但是当我将其传递给另一种方法时,它会在该方法需要使用它之前得到评估:
lazy val i = { print("evaluation happened!"); 42 }
def willEvaluate(n: Int) = println("hello")
willEvaluate(i) // Prints "evaluation happened! hello"
我尝试将n
标记为惰性,但是无法编译:
def willEvaluate(lazy n: Int) = ...
def willEvaluate(n: lazy Int) = ...
// Both fail to compile with error: identifier expected but 'lazy' found.
如何在不求值的情况下将惰性值传递给另一种方法?
答案 0 :(得分:3)
如果可以在函数签名中使用lazy
关键字,则函数签名肯定会看起来更漂亮,但看来这是不可能的。但是,您可以通过将参数声明为by-name parameter来完成所需的操作:
def wontEvaluate(n: => Int) = println("hello")
然后,当您传递其惰性值时,除非它被实际使用,否则不会得到评估。
lazy val i = { print("evaluation happened! "); 42 }
def willEvaluate(n: => Int) = println(n)
wontEvaluate(i) // Prints "hello"
willEvaluate(i) // Prints "evaluation happened! 42"