在Scala中使用具有泛型类型的lambda

在Scala中使用具有泛型类型的lambda,scala,function,generics,lambda,Scala,Function,Generics,Lambda,myFunc的第二个参数是具有复杂参数的函数: def myFunc(list : List[String], combine: (Map[String, ListBuffer[String]], String, String) => Unit) = { // body of myFunc is just a stub and doesn't matter val x = Map[String, ListBuffer[String]]() l

myFunc
的第二个参数是具有复杂参数的函数:

def myFunc(list : List[String],
           combine: (Map[String, ListBuffer[String]], String, String) => Unit) = {
    // body of myFunc is just a stub and doesn't matter
    val x = Map[String, ListBuffer[String]]()

    list.foreach ((e:String) => {
       val spl = e.split(" ")
       combine(x, spl(0), spl(1))
    })

    x
}
我需要将第二个参数传递给
myFunc
,这样它就可以用于各种类型的
A、B
,而不是特定的
String、ListBuffer[String]

def myFunc(list : List[A], combine: (Map[A, B], A, A) => Unit) = {

    val x = Map[A, B]()

    list.foreach(e => {          
        combine(x, e)
    })
}

如何声明和调用这样的构造?

您可以执行以下操作

def myFunc[A, B](list : List[A], combine: (Map[A, B], A, A) => Unit) = {
  val x = Map[A, B]()
  list.foreach (e => combine(x, e, e))
  x
}
像这样使用它

myFunc[String, Int](List("1","2","3"), (obj, k, v) => obj.put(k, v.toInt) ) 

您似乎希望概括所使用的容器。你在找这样的东西吗?这里我们导入
scala.language.higherKinds
,这样我们就可以使用
Container
,这是一种将单个类型参数作为类型参数添加到
addPair
的类型

import scala.language.higherKinds

def addPair[K, V, Container[_]](map: Map[K, Container[V]],
                                addToContainer: (Container[V], V) => Container[V],
                                emptyContainer: => Container[V],
                                pair: (K, V)): Map[K, Container[V]] = {
    val (key, value) = pair
    val existingValues = map.getOrElse(key, emptyContainer)
    val newValues = addToContainer(existingValues, value)

    map + (key -> newValues)
}

您需要指定A和B是类型参数,如下所示:
defmyfunc[A,B](列表:列表[A],组合:(映射[A,B],A,A)=>Unit)