具有元组的高阶函数

时间:2012-11-29 16:10:16

标签: scala

我有以下问题。我试图创建一个接受两个参数的高阶函数:String和函数类型。函数类型以这种方式定义:

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

我还定义了两个具有相同类型的函数f1f2。之后,我尝试使用myfunf1致电f2。这是代码:

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)

我无法理解为什么编译器会抱怨。有人可以解释一下吗?

1 个答案:

答案 0 :(得分: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])]]