gpt4 book ai didi

scala - 将惰性值作为函数或方法参数传递而不对其求值?

转载 作者:行者123 更新时间:2023-12-05 02:59:33 25 4
gpt4 key购买 nike

我有一个 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com