匿名函數的返回類型:爲什麼我寫下鑑於這種代碼在Scala歌劇院倍
package fpinscala.datastructures
sealed trait Tree[+A]
case class Leaf[A](value: A) extends Tree[A]
case class Branch[A](left: Tree[A], right: Tree[A]) extends Tree[A]
object Tree {
def fold[A,B](t: Tree[A])(f: A => B)(g: (B,B) => B): B = {
t match {
case Leaf(x) => f(x)
case Branch(l,r) => g(fold(l)(f)(g),fold(r)(f)(g))
}
}
def mapViaFold[A,B](t:Tree[A])(f: A => B): Tree[B] = {
fold(t)(a => Leaf(f(a)): Tree[B])(Branch(_,_))
}
}
爲什麼我寫下功能a => Leaf(f(a)): Tree[B]
的返回類型?沒有它,我得到的錯誤信息:
Error:(54, 36) type mismatch;
found : fpinscala.datastructures.Branch[B]
required: fpinscala.datastructures.Leaf[B]
fold(t)(a => Leaf(f(a)))(Branch(_,_))
^
在這裏找到答案:https://github.com/fpinscala/fpinscala/blob/master/answers/src/main/scala/fpinscala/datastructures/Tree.scala#L60 –