【发布时间】:2017-02-08 04:21:31
【问题描述】:
我在一个集合中有一系列用户
val users: Seq[User]
我想将它传递到 Queue.enqueue 方法中:
def enqueue(elems : A*)
我可以对我的收藏进行 foreach,但我确定有办法转换它吗?
还有,A*又叫什么?
【问题讨论】:
标签: scala
我在一个集合中有一系列用户
val users: Seq[User]
我想将它传递到 Queue.enqueue 方法中:
def enqueue(elems : A*)
我可以对我的收藏进行 foreach,但我确定有办法转换它吗?
还有,A*又叫什么?
【问题讨论】:
标签: scala
A* 是可变参数类型。要将集合传递给这样的函数,您可以使用特殊的 vararg-expansion 语法,如下所示:
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
【讨论】: