2016-12-01 62 views
0

首先我有一个二叉树类型声明:Scala的函数编程操作:::

sealed trait BT[+A] 
case object Empty extends BT[Nothing] 
case class Node[+A](elem:A, left:BT[A], right:BT[A]) extends BT[A];; 

而且进一步,我有此代码为序遍历这个谜找运营商“:::”。

这个运算符“:::”在这段代码中意味着什么?

def inorder[A](tree: BT[A]): List[A] = { 
    tree match { 
    case Node(v,l,r) =>(inorder(l)) ::: (v::(inorder(r))) 
    case Empty => Nil 
    } 
} 

回答

4

这是一种方法scala.collection.immutable.List它是什么是连接列表。例如:

scala> List(1,2) ::: List(3,4,5) 
res0: List[Int] = List(1, 2, 3, 4, 5) 

查看API documentation

请注意这个特殊情况:当方法名称以:结尾时,Scala会在右侧的值上调用该方法,将左侧的值作为参数传递(其他方法的名称不以:结尾,这是相反的方式)。 API文档说“在列表前面添加给定列表的元素”,这是因为在List(3,4,5)上调用了:::方法,其中List(1,2)作为参数;因此List(1,2)被添加在List(3,4,5)的前面。