Array的map
源代码为:
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)
答案 0 :(得分:15)
通常,当您在库类的源代码中看到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,length和update仍显示为throw new Error()
。 Array#map
已不再存在,而是在WrappedArray
和ArraySeq
上将其作为常规方法发现。
<强>更新强>
如果您有兴趣知道这个编译器魔术已定义,请查看Cleanup.scala的Scala 2.8版本。
答案 1 :(得分:4)
看起来它只是虚拟代码,因为Scala数组实际上是Java代码。