要使用过滤器功能过滤列表,如果使用{}
它可行,但如果使用()
则失败,但为什么?
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)
^
答案 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
。