首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >scala对推断类型的“可接受的复杂性”有什么限制?

scala对推断类型的“可接受的复杂性”有什么限制?
EN

Stack Overflow用户
提问于 2012-07-11 12:03:04
回答 1查看 3.4K关注 0票数 120

根据Scala Language Spec的说法

...允许局部类型推断来限制类型参数推断边界的复杂性。类型的最小性和最大性必须相对于可接受复杂性的类型集来理解。

在实践中,限制是什么?

此外,是否有不同的限制,适用于推断表达式类型与参数类型界限,以及这些限制是什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-04 20:38:27

在推断类型时,编译器通常需要计算类型列表的最小上限(LUB)。例如,if (cond) e1 else e1的类型是e1e1的类型中的LUB。

这些类型可能会变得非常大,例如,在REPL中尝试以下内容:

代码语言:javascript
复制
:type Map(1 -> (1 to 10), 2 -> (1 to 10).toList)
scala.collection.immutable.Map[Int,scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int] with Serializable{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def dropRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def takeRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def drop(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def take(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]}; def dropRight(n: Int): scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]{def reverse: scala.collection.immutable.Seq[Int] with scala.collection.AbstractSeq[Int]; def dropRight(n: Int): scala.collection.immutable.Seq[Int]...

这个commit引入了一些健全性检查来限制这种推断类型的深度。

最近有一些工作是将插件插入到编译过程中,以检测需要很长时间计算的推断类型,并建议在哪些地方使用显式类型注释可能是谨慎的。

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11425350

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档