关于Scala中的yield命令和以下示例:
val values = Set(1, 2, 3)
val results = for {v <- values} yield (v * 2)
-
任何人都可以解释Scala如何知道要收集哪种类型的集合?我知道它是基于值,但我如何编写复制产量的代码?
-
我有什么方法可以改变收藏类型吗?在示例中,我希望结果是List类型而不是Set类型 .
-
如果不这样,从一个集合转换到另一个集合的最佳方法是什么?我知道_:*,但由于Set不是Seq,这不起作用 . 到目前为止我能找到的最好的是val listResults = List()结果 .
PS . 我知道这个例子没有遵循推荐的功能方式(也就是使用map),但它只是一个例子 .
3 回答
for
comprehensions由编译器使用this scheme转换为map
/flatMap
/filter
.This excellent answer by Daniel回答你的第一个问题 .
要更改结果集合的类型,您可以使用
collection.breakout
(也在我上面链接的帖子中进行了解释 . )您可以使用以下方式之一将
Set
转换为List
:Recommended read: The Architecture of Scala Collections
如果使用
map
/flatmap
/filter
而不是用于理解,则可以使用scala.collection.breakOut
创建不同类型的集合:如果你想构建自己的集合类(这对我来说最接近"replicating yield"),你应该看一下this tutorial .
试试这个: