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
。
答案 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。 Unit
和Int
都延伸AnyVal
,因此这是表达式中最具体的类型。