gpt4 book ai didi

Scala 的惰性参数 : How do they work?

转载 作者:行者123 更新时间:2023-12-03 07:36:13 25 4
gpt4 key购买 nike

在解析器组合器库的 Parsers.scala (Scala 2.9.1) 文件中,我似乎遇到了一个鲜为人知的 Scala 功能,称为“惰性参数”。这是一个例子:

def ~ [U](q: => Parser[U]): Parser[~[T, U]] = { lazy val p = q // lazy argument
(for(a <- this; b <- p) yield new ~(a,b)).named("~")
}

显然,将按名称调用参数 q 分配给惰性 val p 时发生了一些事情。

到目前为止,我还无法弄清楚它的作用以及它为什么有用。有人可以帮忙吗?

最佳答案

每次您请求时,都会调用按名称调用参数。惰性值第一次被调用,然后值被存储。如果您再次请求,您将获得存储的值。

因此,这样的模式

def foo(x: => Expensive) = {
lazy val cache = x
/* do lots of stuff with cache */
}

是一种终极的“尽可能推迟工作并且只做一次”的模式。如果您的代码路径根本不会让您需要 x,那么它永远不会被评估。如果您多次需要它,它只会被评估一次并存储以供将来使用。因此,您可以保证执行零次(如果可能)或一次(如果不可能)次昂贵的调用。

关于Scala 的惰性参数 : How do they work?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9809313/

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