使用过滤器时,{}和()之间的区别是什么?

时间:2014-04-22 13:08:40

标签: scala

要使用过滤器功能过滤列表,如果使用{}它可行,但如果使用()则失败,但为什么?

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)
                  ^

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 :(得分:1)

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

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