2016-12-01 6 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).

Смежные вопросы