Scala Yield发电机

时间:2015-05-17 17:54:23

标签: scala

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;的位置返回不同的结果?声明?

1 个答案:

答案 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生成的值为UnitInt,因为此场景中的if是一个带有{{1}值的表达式部分或隐式if-then,在您的情况下为else