2014-04-22 113 views
2

要使用过滤器功能过滤列表,如果使用{}它可以工作,但是如果使用()那么它失败了,但为什么?使用过滤器时{}和()之间有什么区别?

scala> c 
res25: List[(Int, Int)] = List((1,0), (3,2), (5,4)) 

scala> d 
res26: List[(Int, Int)] = List((1,0), (3,2), (5,4)) 

scala> val d=b.filter{case (x,y)=> y % 2 ==0} 
d: List[(Int, Int)] = List((1,0), (3,2), (5,4)) 

scala> val d=b.filter(case (x,y)=> y % 2 ==0) 
<console>:1: error: illegal start of simple expression 
     val d=b.filter(case (x,y)=> y % 2 ==0) 
       ^

回答

4

您没有使用简单的表达式。您与{}第一种形式是

scala> d.filter({case (x,y)=> y % 2 ==0}) 
res177: List[(Int, Int)] = List((1,0), (3,2), (5,4)) 

一个快捷方式,您可以删除()但不是{}

编辑

使用case是没有必要的。您可以访问scala.Tuple2

scala> d.filter(t => t._2 % 2 == 0) 
res182: List[(Int, Int)] = List((1,0), (3,2), (5,4)) 

更短:

scala> d.filter(_._2 % 2 == 0) 
res183: List[(Int, Int)] = List((1,0), (3,2), (5,4)) 

这些都是可以作为论据filter简单的表达式。

1

This {case (x,y)=> y % 2 ==0} is PartialFunction。在Scala中,部分函数必须在花括号内定义。

将部分函数作为参数传递给方法f时,可以执行f({...})f {...}。这与将整数传递给方法g相同,您可以在其中执行g(1)g 1

相关问题