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

Scala – 为什么无法推断包含Vector和List的列表的Seq列表?

发布时间:2020-12-16 09:05:26 所属栏目:安全 来源:网络整理
导读:在2.8.1 / 2.9.0.1 REPL中尝试以下内容,第一个给出错误. val l = List(Vector(1,2),List(3,4,5))error: type mismatch; found : scala.collection.immutable.Vector[Int] required: scala.collection.immutable.Seq[Int]{def companion: scala.collection.ge
在2.8.1 / 2.9.0.1 REPL中尝试以下内容,第一个给出错误.

val l = List(Vector(1,2),List(3,4,5))
error: type mismatch;
 found   : scala.collection.immutable.Vector[Int]
 required: scala.collection.immutable.Seq[Int]{def companion:     scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]; protected def thisCollection: Seq[Int]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def dropRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def takeRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def slice(start: Int,end: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable....
      val l = List(Vector(1,5))
                         ^
:5: error: type mismatch;
 found   : List[Int]
 required: scala.collection.immutable.Seq[Int]{def companion:     scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]; protected def thisCollection: Seq[Int]{def companion: scala.collection.generic.GenericCompanion[Seq[Any]]}; def dropRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def takeRight(n: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def slice(start: Int,end: Int): scala.collection.immutable.Seq[Int]{def companion: scala.collection.generic.GenericCompanion[scala.collection.immutable.Seq[Any]]}; def take(n: Int):...
       val l = List(Vector(1,5))
                                    ^

虽然这成功了:

val l = List[Seq[Int]](Vector(1,5))
//evaluates fine to List[Seq[Int]] = List(Vector(1,5))

scala在第一种情况下试图推断的类型是什么?它是具有结构类型的Seq吗?为什么它不能统一Vector和List?这是否有一些缺失的功能,还是这样(需要明确的类型def)以防止自己在脚下射击?

解决方法

这显然是类型推理器中的一个错误,现在已经在scala 2.9.1中得到修复:

Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Server VM,Java 1.6.0_18).
Type in expressions to have them evaluated.
Type :help for more information.

scala> import collection.immutable._
import collection.immutable._

scala>  List(Vector(1,2,3),List(4,5))
res0: List[scala.collection.immutable.Seq[Int]] = List(Vector(1,5))

(编辑:李大同)

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

    推荐文章
      热点阅读