运算符“:\”在这个scala代码中做了什么?

时间:2013-11-10 16:18:22

标签: scala

我刚刚在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进行拖网之外,是否有人有任何关于如何寻找这些时髦符号的提示?

由于

3 个答案:

答案 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)

:\foldRight的替代语法。

要搜索时髦符号,您可以使用Scalexsbt-man

答案 2 :(得分:1)

它是foldRight的替代语法。

scala-lang.org documentation