2017-05-26 20 views

回答

4

考慮這樣的事情:

def bar(strings: List[String]) = strings.foreach(println) 
def foo(ints: Seq[Int]) = bar(int.map(_.toString).toList) 

foo(List(1,2,3)) 
foo(1 to 3) 
foo(Stream.from(1).take(3)) 

foo接受INTS的Seq,將它們轉換爲字符串,並調用bar,想在List

您可以發送任何類型的Seqfoo,它使用.toList調用bar之前將其轉換爲一個List,因爲這是唯一的類型就會接受。現在,如果foo的參數碰巧已經是List(就像上面的第一個示例中那樣),它最終將調用List.toList,這只是一個更好,更優雅的替代方案,它使代碼中的特殊情況檢查具體類型的論點。

4

List擴展了GenTraversableOnce特徵,這是許多其他可遍歷集合的共同特徵。

GenTraversableOncedeclares a toList方法使得所有的小類都可以轉換成List。此方法必須List(實際上 - 通過返回this)實現。

+0

所以我們從來沒有這樣的情況,我們真的想要調用這種方法? – bzak

+2

如果你知道你手頭的集合是一個List,那麼不需要,它沒有真正的用處。但是你可能有一個'GenTraversableOnce'類型的變量,它的_might_或_might不是'List'(你不知道實際的實現),還是一個不是擴展了'GenTraversableOnce'的列表的具體類型(例如'Array ') - 然後使用'toList'可能會有用。我已經看到它經常使用/使用它。 –

相關問題