如何将元素排入迭代队列,例如队列[列表[节点]]

时间:2015-09-05 20:12:59

标签: scala type-inference

enqueue的{​​{1}}函数已超载。

scala.collection.immutable.Queue

第一个签名允许您将单个项目添加到队列中,后者允许您添加多个项目。

我正在研究图搜索算法,并使用队列来跟踪我到目前为止所经历的路径(def enqueue[B >: A](elem: B]): Queue[B] def enqueue[B >: A](iter: Iterable[B]): Queue[B] )。但是当我尝试将路径排入队列时,编译器假定我想使用带有可迭代签名的函数并抛出错误。

List[Node]

我可以通过将路径包装在另一个列表中来解决这个问题,但这是强迫的,不太清楚。

val path = List(Node(0), Node(1), Node(4))
val q: Queue[List[Node]] = Queue[List[Node]]().enqueue(path)
// Expression of type Queue[Product with Serializable] does not conform to expected type Queue[List[Node]]

有更好的方法吗?

修改 我还注意到val q: Queue[List[Node]] = Queue[List[Node]]().enqueue(List(path)) // compiles 运算符仅用于排队单个元素,我更喜欢它。

:+

2 个答案:

答案 0 :(得分:2)

您可以更明确地了解enqueue的类型参数:

 q.enqueue[List[Node]](path)

应该适合你。

答案 1 :(得分:0)

问题不在于enqueue方法。您正在使用运算符++,该运算符更准确地接受BGenTraversableOnce[B]的列表)。您可能希望使用:+运算符。