加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

为什么Scala中的Array.map的定义是“抛出新的Error()”

发布时间:2020-12-16 18:59:50 所属栏目:安全 来源:网络整理
导读:Array地图的源代码是: 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地图的源代码是:

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)

解决方法

通常,当您看到在库类的源代码中抛出新的Error()时,它表示编译器通过桥接到平台的设施来介入并实现该方法的一点(请记住,这可能是Java或.NET) .

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

在2.8中,将数组集成到Scala集合框架中主要使用正常的langauges特性进行处理 – 根据上下文和类型的隐式参数,从Array [T]到WrappedArray [T]或ArraySeq [T]的隐式转换清单[T]支持创建通用类型T的数组.数组indexing,length和update仍然显示为抛出新的Error(). Array#map不再存在,而是在WrappedArray和ArraySeq上找到这个方法作为常规方法.

UPDATE

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读