为什么表示树的泛型类型类有a和B类型

  • 本文关键字:类型 泛型类型 表示 scala
  • 更新时间 :
  • 英文 :


在《本质标量》一书中,他们有一个使用泛型/类型表示树的例子。

我困惑的是,说这是一棵树。因此,左/右值是节点,并且该值属于Int.类型

为什么折叠的类型参数必须是B而不是A?我很困惑为什么有两种类型A和B,而不仅仅是类型A,如果它是树[Int],它就是Int。

sealed trait Tree[A] {
def fold[B](node: (B, B) => B, leaf: A => B): B
}
final case class Node[A](left: Tree[A], right: Tree[A]) extends Tree[A] {
def fold[B](node: (B, B) => B, leaf: A => B): B =
node(left.fold(node, leaf), right.fold(node, leaf))
}
final case class Leaf[A](value: A) extends Tree[A] {
def fold[B](node: (B, B) => B, leaf: A => B): B =
leaf(value)
}

Fold是一个将F[A]减少为单个值B的操作。

当然,您可以将Int的树缩减为单个Int(通过将整数相加,即(,在这种情况下,AB是相同的。

但折叠可以为你做更多的事情。例如,您还可以将树折叠为String以打印其结构。

Fold比您预期的更通用。

最新更新