少し前に _* を使用して、オブジェクトのリストからフラット化されたセットを作成するコードを見つけました。
実際のコード行はもう少し複雑で、その理由を正確に思い出せなかったので、効果を理解するために少し実験を行いました。これは、次の 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 言語 (IMHO) でのアンダースコアの過剰使用の影響として、特にほとんどの検索エンジンでワイルドカードとして一般的に使用される記号と一緒に使用されている場合、そのユースケースの一部に関するドキュメントを見つけるのは難しいです。 .