In Scala,爲什麼在使用TraversableOnce
的toSet
功能時發生以下情況?Scala TraversableOnce和Set
如果您創建一個工作表(在的IntelliJ)用下面的代碼,你會得到下面的輸出(注意:使用Scala的2.10.2):
val maps = List(List(1,2),List(3,4),List(5,6,7),List(8),List())
maps.flatMap(_.map(_ + " "))
maps.flatMap(_.map(_ + " ")).toSet
maps.flatMap(_.map(_ + " ")).toSet()
即RES4產生一個布爾
> maps: List[List[Int]] = List(List(1, 2), List(3, 4), List(5, 6, 7), List(8), List())
> res2: List[String] = List("1 ", "2 ", "3 ", "4 ", "5 ", "6 ", "7 ", "8 ")
> res3: scala.collection.immutable.Set[String] = Set("3 ", "8 ", "4 ", "5 ", "1 ", "6 ", "2 ", "7 ")
> res4: Boolean = false
不用說我困惑了很久,直到我注意到toSet
在實現中沒有使用圓括號,但爲什麼布爾值?
望着編譯的字節代碼,實際上發生了什麼 - 造成集的應用方法得到了調用單位論證,但不能說爲什麼。看起來像一個錯誤,因爲如果我嘗試在res3 –