B): Array[B] = throw new Error() 但以下方法有效: val name : Arra-6ren">
gpt4 book ai didi

scala - 为什么Scala中Array.map的定义是 "throw new Error()"

转载 作者:行者123 更新时间:2023-12-02 21:04:28 25 4
gpt4 key购买 nike

Arraymap源代码是:

override def map[B](f: A => B): Array[B] = throw new Error()

但以下方法有效:

val name : Array[String]= new Array(1)
name(0)="Oscar"
val x = name.map { ( s: String ) => s.toUpperCase }
// returns: x: Array[java.lang.String] = Array(OSCAR)

最佳答案

通常,当您看到throw new Error()时在库类的源代码中,它代表编译器通过桥接到平台设施(记住这可以是 Java 或 .NET)来干预和实现该方法的点。

Array SID解释了 Scala 2.7.x 中如何处理数组,以及它们在 2.8 中如何变化。编译器用于神奇地将对象转换为 BoxedArray如果您调用map .

在 2.8 中,数组与 Scala 集合框架的集成主要是通过使用普通语言功能来处理的——来自 Array[T] 的隐式转换。至WrappedArray[T]ArraySeq[T] ,取决于上下文和类型 Manifest[T] 的隐式参数支持创建泛型类型的数组 T 。阵列 indexing , lengthupdate仍然显示为 throw new Error()Array#map不再存在,而是在 WrappedArray 上找到它和ArraySeq作为常规方法。

更新

如果您有兴趣了解这个编译器魔法的定义,请查看 Cleanup.scala 的 Scala 2.8 版本。 .

关于scala - 为什么Scala中Array.map的定义是 "throw new Error()",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2884844/

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