scala – 为什么在映射操作后将Range转换为Vector?
发布时间:2020-12-16 08:58:27 所属栏目:安全 来源:网络整理
导读:继Coursera上的 Scala课程后,Martin Odersky展示了一个示例代码: 1 to 5 map ( i = i*i ) 并且他说Range被转换为Vector,因为它们共享相同的接口(IndexedSeq)并且结果不能表示为Range (在它的例子中更清楚,因为他生成了一对不能表示为Range的对). 我不太明白
继Coursera上的
Scala课程后,Martin Odersky展示了一个示例代码:
1 to 5 map ( i => i*i ) 并且他说Range被转换为Vector,因为它们共享相同的接口(IndexedSeq)并且结果不能表示为Range 我不太明白,因为我认为他之前曾说过,在for表达式中,第一个生成器将确定将要生成的元素类型,并且似乎并非总是如此,至少对于Range来说. 而且我不确定为什么输出是Vector,因为Vector可能不是唯一可以表示上面计算结果的其他实现. 有人可以帮我理解这部分吗? 解决方法
map秘密地将CanBuildFrom作为隐式参数.它的工作是根据您已经获得的新系列(以及内容的类型)生成新的系列.由于Range不能包含任意内容 – 甚至不包含任意整数 – 因此没有产生Range的CanBuildFrom.具有CanBuildFrom的Range的最具体超类型是IndexedSeq.实际上由此构建的集合是Vector.
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |