7

次の問題があります。String と関数型の 2 つのパラメーターを受け入れる高次関数を作成しようとしていました。関数型は次のように定義されます。

(String, List[String]) => List[(String, List[String])]

また、同じ型を持つ2 つの関数f1を定義しました。その後、orf2で呼び出そうとしています。コードは次のとおりです。myfunf1f2

object Main extends App {


def f1(t: (String,List[String])): List[(String,List[String])] = ...

def f2(t: (String,List[String])): List[(String,List[String])] =  ...

def myfun(tableName: String)(fn: (String,List[String]) => List[(String,List[String])]):  List[(String,List[String])] =
 ...

val res: List[(String,List[String])] = myfun("...")(f1)
res foreach println
val res2: List[(String,List[String])] = myfun("...")(f2)
res2 foreach println
}

ここにエラーがあります:

[error]  found   : (String, List[String]) => List[(String, List[String])]
[error]  required: (String, List[String]) => List[(String, List[String])]
[error]   val res: List[(String,List[String])] =  myfun("...")(f1)

コンパイラが不平を言っている理由がわかりません。誰かがそれを説明できますか?

4

1 に答える 1

8

これを試して。への引数リストを囲む余分な括弧のセットに注意してくださいfn

def myfun(tableName: String)
         (fn: ((String,List[String])) => List[(String,List[String])]):  List[(String,List[String])] = ...

残念ながら、この余分な括弧のセットは区別するために必要です

Function1[(String, List[String]), List[(String,List[String])]] 

から

Function2[String, List[String], List[(String, List[String])]]
于 2012-11-29T16:24:07.560 に答える