下面的Scala代码片段的输出是什么?

jm81lzqq  于 2023-03-02  发布在  Scala
关注(0)|答案(1)|浏览(128)

为什么我会得到下面Scala代码片段的输出List((), (), (), ())

val ans1 = for(i3 <- 1 to 4) yield {
 if (i3 % 2 == 0)
  i3
}

我尝试了以下方法:

val ans1 = for(i3 <- 1 to 4) yield {
if (i3 % 2 == 0)
i3
}

预期值:List(2,4)

cwxwcias

cwxwcias1#

如果thenExprelseExpr具有类型A,则if (condition) thenExpr else elseExpr也具有类型A
如果thenExprelseExpr具有不同的类型,则if ...具有它们的超类型。
如果省略elseExpr,则if (condition) thenExprif (condition) thenExpr else ()的简写,其中()具有类型Unit。因此,如果thenExpr具有类型Unit,则if (condition) thenExpr具有类型Unit,否则if (condition) thenExpr具有类型,其是某种类型(thenExpr之一)和Unit(即AnyAnyVal)的超类型。
这就是()的来源,也是返回类型为Seq[AnyVal]而不是Seq[Int]的原因。
只是不要忽略else部分。你也可以使用标准的方法.map.filter
正如@Always_A_Learner和@Dima建议的那样,你可以试试

val ans1 = for(i3 <- 1 to 4 if i3 % 2 == 0) yield i3

相关问题