val list1 = List(1,2,3,4,5,6) //Creating a dummy List
val res1 = for(x <- list1 if x> 3) yield x
// returns res1: List[Int] = List(4, 5, 6)
val res2 = for(x <- list1) yield{
if (x>3) x //Filtering out values lesser then 3
}
//returns res2: List[AnyVal] = List((), (), (), 4, 5, 6)
//Expected this to be List(4, 5, 6)
上述收益率如何根据&#34; if&#34;的位置返回不同的结果?声明?
答案 0 :(得分:5)
只有if
中的res1
充当过滤器。 if
中的res2
充当常规条件语句。
val res1 = for(x <- list1 if x> 3) yield x
使用if
作为<-
语句右侧的一部分,过滤语句的值。
for(x <- list1) yield { if (x>3) x }
一旦一个值到达yield块,将返回yield块的结果,无论其类型如何。
在您的示例中,res2
生成的值为Unit
或Int
,因为此场景中的if
是一个带有{{1}值的表达式部分或隐式if-then
,在您的情况下为else
。