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

scala – 在2.9.1和2.10每晚平铺一个选项[List [Int]]的差异

发布时间:2020-12-16 19:04:05 所属栏目:安全 来源:网络整理
导读:我在2.9.1和2.10夜间得到不同的行为 – 有什么变化? Welcome to Scala version 2.9.1.final (OpenJDK Client VM,Java 1.6.0_22).Type in expressions to have them evaluated.Type :help for more information.scala Some(3) map (x = List(x,-x)) flattenr
我在2.9.1和2.10夜间得到不同的行为 – 有什么变化?

Welcome to Scala version 2.9.1.final (OpenJDK Client VM,Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.

scala> Some(3) map (x => List(x,-x)) flatten
res0: List[Int] = List(3,-3)

与:

Welcome to Scala version 2.10.0.r26084-b20111129020255 (OpenJDK Client VM,-x)) flatten
<console>:8: error: Cannot prove that List[Int] <:< Option[B].
              Some(3) map (x => List(x,-x)) flatten

解决方法

原因是该选项在2.10中获得了一种扁平化方法,仅适用于嵌套选项.

在2.9中,通过隐式转换为Iterable添加了对flatten的调用,结果是一个Iterable(或者一个子类型,取决于Option中的嵌套值).

以下是2.10中的flatten的签名:

def flatten[B](implicit ev: <:<[A,Option[B]): Option[B]

它说:如果你能找到这个选项中的元素是一个Option本身的证据,那么说Option [B],我可以弄平它,并返回一个Option [B].

只有在没有该名称的方法的情况下,才会尝试这样的内容,这样才能解释为什么它不会回到2.9方法.

(编辑:李大同)

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

    推荐文章
      热点阅读