2015-09-05 22 views
3

scala.collection.immutable.Queueenqueue函數被重載。如何將一個元素排入迭代隊列,例如隊列[列表[節點]]?

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 

有沒有更好的方法來做到這一點?

編輯 我也注意到了:+運營商只用來排隊單元素,我喜歡這樣,甚至更好。

val q: Queue[List[Node]] = Queue[List[Node]]() :+ path 

回答

2

你可以更加明確的enqueue類型參數:

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

應該爲你工作。

+0

很好的建議,這個工程。 – climmunk

0

問題不在於enqueue方法。您正在使用運營商++,它接受B(更確切地說,是GenTraversableOnce[B])的列表。您可能需要使用:+運算符。

+0

謝謝,@soon。我注意到在看到您的評論並編輯我的問題之前。這個問題仍然與排隊方法有關。 – climmunk