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

Osc*_*Ryz 9 scala

的源代码map用于阵列是:

override def map[B](f: A => B): Array[B] = throw new Error()
Run Code Online (Sandbox Code Playgroud)

但以下工作:

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)
Run Code Online (Sandbox Code Playgroud)

ret*_*nym 15

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

所述阵列SID说明如何使用阵列Scala中2.7.x进行处理,以及它们如何在2.8改变.使用对象神奇地转换成一个编译器BoxedArray,如果你打电话map.

在2.8中,Arrays与Scala集合框架的集成主要通过使用普通语言特征来处理 - 根据上下文的隐式转换Array[T],WrappedArray[T]或者支持创建泛型类型数组的ArraySeq[T]类型的隐式参数.数组索引,长度更新仍显示为.不再存在,相反,你会发现这个和常规方法.Manifest[T]Tthrow new Error()Array#mapWrappedArrayArraySeq

UPDATE

如果您有兴趣知道这个编译器魔术是定义的,请看看Scala 2.8的Cleanup.scala化身.