加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

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
(在它的例子中更清楚,因为他生成了一对不能表示为Range的对).

我不太明白,因为我认为他之前曾说过,在for表达式中,第一个生成器将确定将要生成的元素类型,并且似乎并非总是如此,至少对于Range来说.

而且我不确定为什么输出是Vector,因为Vector可能不是唯一可以表示上面计算结果的其他实现.

有人可以帮我理解这部分吗?

解决方法

map秘密地将CanBuildFrom作为隐式参数.它的工作是根据您已经获得的新系列(以及内容的类型)生成新的系列.由于Range不能包含任意内容 – 甚至不包含任意整数 – 因此没有产生Range的CanBuildFrom.具有CanBuildFrom的Range的最具体超类型是IndexedSeq.实际上由此构建的集合是Vector.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读