Scala - Dequeue没有返回正确的结果

时间:2017-11-03 19:13:04

标签: scala queue

我有一个List [Any]的队列,但不知何故,dequeue没有返回正确的结果,也没有从队列中删除该项目。知道为什么会这样吗?

以下是一个例子:

scala> val a = scala.collection.immutable.Queue(List(1, "A", "B", 987), List(2, "C", "D", 456), List(3, "E", "F", 123))
a: scala.collection.immutable.Queue[List[Any]] = Queue(List(1, A, B, 987), List(2, C, D, 456), List(3, E, F, 123))

scala> a.dequeue
res5: (List[Any], scala.collection.immutable.Queue[List[Any]]) = (List(1, A, B, 987),Queue(List(2, C, D, 456), List(3, E, F, 123)))

scala> a
res6: scala.collection.immutable.Queue[List[Any]] = Queue(List(1, A, B, 987), List(2, C, D, 456), List(3, E, F, 123))

1 个答案:

答案 0 :(得分:4)

您使用了不可变队列,因此dequeue不会修改原始队列,而是将head元素与head元素一起作为元组返回:

val (elem, newQ) = oldQ.dequeue

例如,您可以将尾部队列提供给递归调用以进行处理。像这样:

def pq(q: Queue[List[Any]]): Unit = {
  q.dequeue match {
    case (head, tail) => 
      println(head + "..."); // ... process head element ...
      if (tail.nonEmpty) pq(tail)
  }
}