为什么AnyVal是`if(i> 5)i`的推断类型?

时间:2016-06-05 14:19:53

标签: scala

scala> for(i <-1 to 10) yield { if(i>5) i}
res3: scala.collection.immutable.IndexedSeq[AnyVal] = Vector((), (), (),  (), (), 6, 7, 8, 9, 10)

为什么这是AnyVal?我期待Int

2 个答案:

答案 0 :(得分:4)

因为你的for { i <- 1 to 10 if i > 5 } yield i 没有(总是)返回一个Int,就像另一个答案所解释的那样。 我猜,你真正想写的是

Seq[Int]

这确实会给你一个{{1}}(大小为5)。

答案 1 :(得分:2)

您的if表达式

if(i > 5) i
如果条件为假,

评估为Unit。 UnitInt都延伸AnyVal,因此这是表达式中最具体的类型。