型を推測するとき、コンパイラは多くの場合、型リストの最小Upper Bound(LUB)を計算する必要があります。たとえば、if (cond) e1 else e1
のタイプは、e1
およびe1
のタイプのLUBです。
これらのタイプは、例えばREPLでこれをしようと、かなり大きく得ることができます:
: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は、そのような推論された型の深さを制限するために、いくつかの健全性チェックを導入しました。
計算に時間がかかる推論型を検出するためにコンパイルプロセスにプラグインし、明示的な型の注釈が賢明であるかもしれない場所を示唆する最近の仕事がいくつかあります。
[このブログ](http://pchiusano.blogspot.com/2011/05/making-most-of-scalas-extremely-limited.html)は、このトピックに関するいくつかの興味深い議論を持っています – Jamil
はい、それは1つの種類スカラーが推論することを拒否する型の部分的に適用される型コンストラクタ。私は他人がいるのだろうかと思う。 – Owen
ここに記載されたスカラー言語のメーリングリストに投稿することをお勧めします:http://www.scala-lang.org/node/199 – david