Seb*_*ber 8 scala scala-collections
继Coursera上的Scala课程后,Martin Odersky展示了一个示例代码:
1 to 5 map ( i => i*i )
Run Code Online (Sandbox Code Playgroud)
并且他说Range变换为a Vector因为它们共享相同的接口(IndexedSeq)并且结果不能表示为a Range
(在它的示例中更清楚,因为他生成了一对不能表示为a的对Range).
我不确定理解,因为我认为他之前说过,在for表达式中,第一个生成器将决定将要生成的元素的种类,并且它似乎并不总是如此,至少对于Range.
而且我不确定为什么输出是Vector,因为Vector可能不是唯一可以表示上面计算结果的其他实现.
有人可以帮我理解这部分吗?
Rex*_*err 10
map秘密地采取一个CanBuildFrom隐含的论点.它的工作是根据您已经获得的新系列(以及内容的类型)生成新的系列.既然Range不能包含任意东西 - 甚至不包含任意整数 - 就没有CanBuildFrom产生任何东西Range.最具体的超Range确实有一个CanBuildFrom就是IndexedSeq.实际上由此构建的集合是Vector.
| 归档时间: |
|
| 查看次数: |
1234 次 |
| 最近记录: |