В файле 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
.
До сих пор я не смог понять, что это делает и почему это полезно. Кто-нибудь может помочь?