的源代码map
for Array is:
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)来干预和实现该方法的点。
The 阵列SID解释了 Scala 2.7.x 中如何处理数组,以及它们在 2.8 中如何变化。编译器用于神奇地将对象转换为BoxedArray
如果你打电话map
.
在 2.8 中,将数组集成到 Scala 集合框架中主要是通过使用普通语言功能来处理的——从Array[T]
to WrappedArray[T]
or ArraySeq[T]
,取决于上下文和类型的隐式参数Manifest[T]
支持创建泛型类型的数组T
. Array indexing, length and update仍然显示为throw new Error()
. Array#map
不再存在,而是您在WrappedArray
and ArraySeq
作为常规方法。
UPDATE
如果您有兴趣了解这个编译器魔法的定义,请查看 Scala 2.8 的化身清理.scala.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)