我有一个 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.
如何在不计算惰性值的情况下将惰性值传递给另一个方法?
最佳答案
如果您可以在其中使用 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"
关于scala - 将惰性值作为函数或方法参数传递而不对其求值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57825296/