3

これはコンパイルします

//legal
def s1 = List("aaa","bbb").collect { case x => x.split("\\w") }

以下はしません。

// all illegal

// missing parameter type for expanded function ((x$2) => x$2.split{<null>}("\\w"{<null>} {<null>}){<null>}
def s2 = List("aaa","bbb").collect ( _.split("\\w") )

// missing parameter type
def s3 = List("aaa","bbb").collect ( x => x.split("\\w") )

// type mismatch; found : String => Array[java.lang.String] required: PartialFunction[java.lang.String,?]
def s4 = List("aaa","bbb").collect ( (x:String) => x.split("\\w") )

そして、scalaコンパイラーが私のエラーがどこにあるかを私と通信するために最善を尽くしている間、それは私の頭上で起こっています。

これもコンパイルされるという事実

def s2 = List("aaa","bbb").find ( _.split("\\w").length > 2 )

いつ何を使うかがさらに混乱します

4

2 に答える 2

7

2番目の部分がコンパイルされない理由はList#collectPartialFunction[A, B]パラメータとして取得するため、適用する関数を指定し、この関数を適用する要素をフィルタリングすることができるためです。

例えば:

List(1、 "a"、2、 "3")。collect {case x:Int => x + 1}

整数要素にのみ適用されList(2, 3)List[Int]

あなたの場合、あなたは仕事をするためmapにそして関数を使うことができますfilter

def s1 = List("aaa","bbb").map(_.split("\\w")).filter(_.length > 2)

于 2012-11-03T09:23:41.480 に答える
1

collectは、部分関数(一連のcaseステートメント)を期待しています。

list.collect {
  case a => ...
  case b => ...
  ...
}
于 2012-11-03T09:23:46.987 に答える