tokens.toSeq 可以,但是如果你在命令行中输入这个,你会看到Seq 无论如何都会在后台创建一个List:
scala> val tokens = List("the", "program", "halted")
tokens: List[String] = List(the, program, halted)
scala> tokens.toSeq
res0: scala.collection.immutable.Seq[String] = List(the, program, halted)
Seq 很有趣。如果您的数据更适合存储在List 中,它会将其转换为列表;否则,它将把它变成Vector(并且向量本身很有趣......) - 因为Seq 是List 和Vector 的超类型。如果有的话,除非您有特定的用例,否则您真的应该默认使用 Vector 而不是其他集合类型,但这是另一个问题的答案。
当然还有其他选择:
scala> val test: Seq[String] = tokens
test: Seq[String] = List(the, program, halted)
scala> val test2: Seq[String] = for (token <- tokens) yield token
test2: Seq[String] = List(the, program, halted)
scala> val test3 = (tokens: Seq[String])
test3: Seq[String] = List(the, program, halted)
scala> val test4: Seq[String] = tokens.mkString(" ").split(" ").toSeq
test4: Seq[String] = WrappedArray(the, program, halted)
(开个玩笑)
但要点是,您可以将变量类型指定为 Seq[String],Scala 会根据它在后台处理 Seq、List、Vector 等的方式来处理它。