Ленивые аргументы Scala: как они работают?

В файле 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.

До сих пор я не смог понять, что это делает и почему это полезно. Кто-нибудь может помочь?

37
задан python dude 21 March 2012 в 16:59
поделиться