【发布时间】:2012-03-21 16:59:16
【问题描述】:
在解析器组合库的 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。
到目前为止,我还无法弄清楚它的作用以及它为何有用。有人可以帮忙吗?
【问题讨论】:
-
你有没有努力去寻找自己?它是 Scala 语言的一部分,互联网搜索应该会在
scala lazy上显示足够多的点击量。 -
@ziggystar:我已经进行了 2-3 次 Google 搜索,但找不到任何有用的信息。一些 Scala 功能请求中提到了惰性参数,但没有给出我能理解的解释。
-
@ziggystar:功能请求在这里:issues.scala-lang.org/browse/SI-240。此外,搜索
scala lazy甚至scala lazy argument似乎不会产生很多有用的信息,因为您将主要获得关于更基本的东西的结果,例如惰性 val 和按名称调用。 -
看起来你被那个评论弄糊涂了。它基本上只是一个名称调用参数和同一行上的
lazy val。我以为你只是在问lazy val是什么。
标签: scala lazy-evaluation