回答
考虑这样的事情:
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