我對Scala很陌生,並且對類型系統有疑問。Scala類型檢查器如何知道防止在已經平坦的List上調用flatten
flatten方法對嵌套集合起作用,所以如果我有一個List列表,它會將它壓平成List。但是在一個已經平坦的集合上打個扁叫是沒有意義的。當然,Scala類型檢查器會將其標記爲錯誤。
List(List(1,2,3),List(4,5,6)).flatten // produces List(1,2,3,4,5,6)
List(1,2,3,4).flatten // type error
據我所知,這在某種程度上依賴於一個隱式參數來扁平化。但是我不知道隱式值從何而來,以及它如何用來斷言被調用的對象的類型。另外,爲什麼不隱式參數顯示在List.flatten的scaladoc中?
轉換不一定是隱式的,這也適用:List(1-> 2,3-> 4).flatten(p => List(p._1,p.2)) –
當然,任何隱式參數也可以明確傳遞。 –