我有用戶的序列集合如何轉換一個Seq [User],以便我可以將它傳遞給A *參數?
val users: Seq[User]
在我想它傳遞到Queue.enqueue方法,該方法:
def enqueue(elems : A*)
我可以在我收集的foreach,但我相信有一種方法可以將其轉換爲正確的?
另外,什麼是A *再次調用?
我有用戶的序列集合如何轉換一個Seq [User],以便我可以將它傳遞給A *參數?
val users: Seq[User]
在我想它傳遞到Queue.enqueue方法,該方法:
def enqueue(elems : A*)
我可以在我收集的foreach,但我相信有一種方法可以將其轉換爲正確的?
另外,什麼是A *再次調用?
A*
是一個可變參數的類型。要通過收集到這樣的功能,你可以使用特殊的變量參數,擴展語法,就像這樣:
queue.enqueue(seq: _*) // If queue is of type Queue[User].
你可以使用這個符號只有當你的收藏是Seq
,或者如果可以隱式轉換爲一個Seq
。
只要A
是一種類型的參數,並且是兼容(作爲類型約束/方差)與User
:
enqueue(users: _*)
如果隊列是可變的,你可以使用enqueue
如所指出的其他答案 或使用++=
scala> val mQueue = scala.collection.mutable.Queue[Int](1, 2, 3, 4, 5)
mQueue: scala.collection.mutable.Queue[Int] = Queue(1, 2, 3, 4, 5)
scala> val aSeq = Seq[Int](6, 7, 8, 9, 10)
aSeq: Seq[Int] = List(6, 7, 8, 9, 10)
scala> mQueue ++= aSeq
res26: mQueue.type = Queue(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
如果隊列是不可變的,你必須使用enqueue
如下:
scala> val imQueue = scala.collection.immutable.Queue[Int](1, 2, 3, 4, 5)
imQueue: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3, 4, 5)
scala> imQueue.enqueue(aSeq.toList)
res32: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
如果是不可變的,顧名思義,imQueue
不會更新,而是 返回另一個不可變隊列。
scala> imQueue
res33: scala.collection.immutable.Queue[Int] = Queue(1, 2, 3, 4, 5) // still original values
可能的重複[從Scala使用可變參數](http://stackoverflow.com/questions/1008783/using-varargs-from-scala) –