1

我发现了一段我前段时间使用 _* 从对象列表创建扁平集的代码。

真正的代码行要复杂一些,因为我不记得确切的原因,所以需要进行一些实验来理解效果,这实际上非常简单,如下面的 REPL 会话所示:

scala> val someList = List("a","a","b")
someList: List[java.lang.String] = List(a, a, b)

scala> val x = Set(someList: _*)
x: scala.collection.immutable.Set[java.lang.String] = Set(a, b)

scala> val y = Set(someList).flatten
y: scala.collection.immutable.Set[java.lang.String] = Set(a, b)

scala> x == y
res0: Boolean = true

就像在没有展平的情况下发生的事情的参考:

scala> val z = Set(someList)
z: scala.collection.immutable.Set[List[java.lang.String]] = Set(List(a, a, b))

因为我不记得我是从哪里得到这个成语的,所以我想听听那里实际发生了什么,以及采用一种或另一种方式是否有任何后果(除了可读性影响)

PS:可能是由于在 Scala 语言中过度使用下划线(恕我直言),很难找到关于它的一些用例的文档,特别是如果它与大多数搜索引擎中常用的通配符一起出现.

4

1 回答 1

4

_*是为了扩展这个集合,就好像它是按字面意思写在这里一样,所以

val x = Set(Seq(1,2,3,4): _*)

是相同的

val x = Set(1,2,3,4)

Set(someList)将 someList 视为单个参数。

要查找时髦的符号,您可以使用symbolhound

于 2013-06-25T14:41:12.847 回答