回答
考慮這樣的事情:
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
。
您可以發送任何類型的Seq
到foo
,它使用.toList
調用bar
之前將其轉換爲一個List
,因爲這是唯一的類型就會接受。現在,如果foo
的參數碰巧已經是List
(就像上面的第一個示例中那樣),它最終將調用List.toList
,這只是一個更好,更優雅的替代方案,它使代碼中的特殊情況檢查具體類型的論點。
List
擴展了GenTraversableOnce
特徵,這是許多其他可遍歷集合的共同特徵。
GenTraversableOnce
declares a toList
方法使得所有的小類都可以轉換成List
。此方法必須由List
(實際上 - 通過返回this
)實現。
所以我們從來沒有這樣的情況,我們真的想要調用這種方法? – bzak
如果你知道你手頭的集合是一個List,那麼不需要,它沒有真正的用處。但是你可能有一個'GenTraversableOnce'類型的變量,它的_might_或_might不是'List'(你不知道實際的實現),還是一個不是擴展了'GenTraversableOnce'的列表的具體類型(例如'Array ') - 然後使用'toList'可能會有用。我已經看到它經常使用/使用它。 –
- 1. 爲什麼Scala爲Short和Byte類型定義了一個「+ =」運算符?
- 2. 爲什麼scala將Seq轉換爲List?
- 3. Ruby Tempfile#tap:什麼類定義了這個方法,它用於什麼?
- 4. Scala的List類應該有一個indicesWhere方法嗎?
- 5. 爲什麼main()方法在Scala的定義中不需要'='?
- 6. 爲什麼Scala List沒有訂購?
- 7. Scala:爲什麼List [=> Int]不工作?
- 8. 檢查一個類是否定義了函數的最快方法是什麼?
- 9. 爲什麼我爲#找到一個未定義的方法`xpath'?
- 10. 爲什麼System.Drawing.Image類定義爲抽象,同時還定義了將它作爲類型返回的方法?
- 11. 我定義了一個equals方法,但是Hashtable忽略它。爲什麼?
- 12. 如何在Scala中定義一個返回類型的方法?
- 13. 我可以在Scala類中定義一個無名方法嗎?
- 14. 爲什麼json.dumps(list(np.arange(5)))失敗,而json.dumps(np.arange(5).tolist())工作
- 15. 什麼是結構類型scala語法定義的actuall類?
- 16. 爲什麼在這個Scala方法定義中有兩組參數/圓括號?
- 17. 爲什麼在Scala中追加List以返回其他List類型?
- 18. 爲什麼Scala不可變的HashMap方法返回一個Map?
- 19. NoMethodError(未定義的方法'text'爲nil:NilClass)發生了什麼?
- 20. 爲什麼我不能定義一個`delete`方法?
- 21. 爲什麼mount_griddler是一個未定義的方法?
- 22. 紅寶石。哪個類定義了一個方法?
- 23. 爲什麼沒有爲命名指針類型定義方法?
- 24. 聲明,然後定義一個類方法 - 爲什麼會出錯?
- 25. 爲什麼必須在C++類定義中聲明一個方法?
- 26. 我在做什麼這個方法定義和調用錯了?
- 27. 未定義的方法,爲什麼?
- 28. 爲什麼'transform_keys'方法未定義?
- 29. 未定義的方法 'delete_car_user_path',爲什麼
- 30. 什麼:+ =爲scala.collection.immutable.Vector定義的方法?
它在每個其他stdlib集合上,爲什麼它不應該在這個? – Reactormonk