我刚刚在scalacheck文档中遇到过这个问题,并且google在尝试查找“:\”运算符的作用时没有太大帮助:
abstract sealed class Tree[T] {
def merge(t: Tree[T]) = Internal(List(this, t))
def size: Int = this match {
case Leaf(_) => 1
case Internal(children) => (children :\ 0) (_.size + _)
}
}
case class Internal[T](children: Seq[Tree[T]]) extends Tree[T]
case class Leaf[T](elem: T) extends Tree[T]
除了通过模糊的scaladoc进行拖网之外,是否有人有任何关于如何寻找这些时髦符号的提示?
由于
答案 0 :(得分:8)
这是一个foldRight。
(children :\ 0) (_.size + _)
相当于
children.foldRight(0)(_.size + _)
也等同于
children.foldRight(0)((a,b) => a.size + b)
如果检查Seq [T]的库代码,则':\'方法定义为:
def :\[B](z: B)(op: (A, B) => B): B = foldRight(z)(op)
答案 1 :(得分:2)
答案 2 :(得分:1)
它是foldRight
的替代语法。