2014-04-22 44 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

相關問題