Scala - 混淆了懒惰的语法

时间:2014-05-22 17:46:49

标签: scala

您好我正在阅读一本名为" Scala中的函数式编程"的书。书上有这样的代码

trait Stream[+A] {
  def uncons: Option[(A, Stream[A])]
  def isEmpty: Boolean = uncons.isEmpty
}
object Stream {
...
def cons[A](hd: => A, tl: => Stream[A]): Stream[A] =
  new Stream[A] {
    lazy val uncons = Some((hd, tl))
  }
...

它说hd: => A语法使这个懒惰的val

<小时/> 但the code in the github repo有类似

的内容
trait Stream[+A]{
  def toList: List[A] = {
        @annotation.tailrec
        def go(s: Stream[A], acc: List[A]) : List[A] = s match {
          case Cons(h,t) => go(t(), h() :: acc)
          case _ => acc
        }

        go(this, List()).reverse
      }
    }
case class Cons[+A](h: ()=>A, t: () => Stream[A]) extends Stream[A]
  1. h: =>Ah: ()=>A之间有什么区别。
  2. 为什么代码的第二部分在()
  3. 之类的参数之后有go(t(), h(), :: acc)

0 个答案:

没有答案