我试图将高阶泛型函数作为参数传递给另一个泛型函数。但是,我很难做到这一点。以下是我试图实现的示例代码。当传递高阶函数作为参数时,Scala泛型 - 类型不匹配错误
def foo[T](data: Seq[T]) = {
//some codes
}
def bar[U](id: Sring, fn: Seq[U] => Unit) = {
criteria match {
case x => data:Seq[String] = //some data;
fn(data)
case b => data:Seq[Int] = //some data;
fn(data)
case c => data:Seq[Char] = //some data;
fn(data)
}
}
bar("123", foo)
如果我运行代码,我会得到错误 - 类型不匹配 - 预计序列[U]发现 - 序列[字符串]
如果bar()动态调用fn()会怎么样?即可以根据条件将foo()例如不同的数据类型序列通过。 Seq [String],Seq [Int],Seq [Char]等,因为我已经更新了问题。 –
@RaKa这是一个完全不同的问题。你需要一个classtag:http://stackoverflow.com/questions/5400394/how-to-get-the-actual-type-of-a-generic-type你实际上想要实现什么?在我看来,如果没有泛型,你的代码可以大大简化 – nmat