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
运算符仅用于排队单个元素,我更喜欢它。
:+
答案 0 :(得分:2)
您可以更明确地了解enqueue
的类型参数:
q.enqueue[List[Node]](path)
应该适合你。
答案 1 :(得分:0)
问题不在于enqueue
方法。您正在使用运算符++
,该运算符更准确地接受B
(GenTraversableOnce[B]
的列表)。您可能希望使用:+
运算符。