2

我刚刚在 scalacheck 文档中遇到了这个问题,而谷歌在尝试查找“:\”运算符的作用时并没有多大帮助:

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 拖网之外,还有没有人有关于如何搜索这些时髦符号的任何提示?

谢谢

4

3 回答 3

8

这是一个折叠对。

(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)
于 2013-11-10T16:28:53.047 回答
2

:\是 . 的替代语法foldRight

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

于 2013-11-10T17:37:50.660 回答
1

它是foldRight.

scala-lang.org 文档

于 2013-11-10T16:26:07.510 回答