gpt4 book ai didi

scala - 为什么 Map 操作后 Range 会转换为 Vector?

转载 作者:行者123 更新时间:2023-12-01 00:47:07 25 4
gpt4 key购买 nike

在 Coursera 上的 Scala 类(class)之后,Martin Odersky 展示了一个示例代码:

1 to 5 map ( i => i*i )

他说 Range转换为 Vector因为它们共享相同的接口(interface)( IndexedSeq )并且结果不能表示为 Range(在它的示例中更清楚,因为他生成了一对不能表示为 Range )。

我不确定是否理解,因为我认为他之前说过,在 for 表达式中,第一个生成器将确定将产生的元素类型,而且似乎并不总是如此,至少对于 Range .

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

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

最佳答案

map偷偷拍了CanBuildFrom作为一个隐含的论点。它的工作是根据您已经拥有的集合(以及内容的类型)生成一个新集合。由于Range不能包含任意东西——甚至是任意整数——没有CanBuildFrom产生 Range . Range 的最具体的父类(super class)型确实有 CanBuildFromIndexedSeq .由它实际构建的集合是 Vector .

关于scala - 为什么 Map 操作后 Range 会转换为 Vector?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13130458/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com