我发现了一段我前段时间使用 _* 从对象列表创建扁平集的代码。
真正的代码行要复杂一些,因为我不记得确切的原因,所以需要进行一些实验来理解效果,这实际上非常简单,如下面的 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 语言中过度使用下划线(恕我直言),很难找到关于它的一些用例的文档,特别是如果它与大多数搜索引擎中常用的通配符一起出现.