Scala 关联类型声明中的参数

Scala 关联类型声明中的参数,scala,type-parameter,Scala,Type Parameter,我有一个通用的解析器方法,它从某个源读取数据,并将其转换为适当的类型。举个例子,想象一下这样的情况: def readStuff[T : Manifest](input: Seq[String]): Т = { val constructor = manifest .runtimeClass .getConstructors .head val params = constructor .getParameterTypes .zip

我有一个通用的解析器方法,它从某个源读取数据,并将其转换为适当的类型。举个例子,想象一下这样的情况:

 def readStuff[T : Manifest](input: Seq[String]): Т = {
   val constructor = manifest
     .runtimeClass
     .getConstructors
     .head
   val params = constructor
     .getParameterTypes
     .zip(input)
     .map { case (clazz, str) => toType(str, clazz) }
   constructor.newInstance(params).asInstanceOf[T]
 }
case class Person(
  firstName: String, 
  lastName: String, 
  middleName: String,
  age: Int
)

readStuff[MyStuff](inputs) { 
  case (0|1, s) => require(s.nonEmpty); s
  case (2, s) if s == null => "" 
  case (_, x: Int) => require(x > 0); x
  case x => x
}
现在,我想为调用者添加一个传递额外验证/消息处理逻辑的功能,这样我就可以编写如下内容:

 def readStuff[T : Manifest](input: Seq[String]): Т = {
   val constructor = manifest
     .runtimeClass
     .getConstructors
     .head
   val params = constructor
     .getParameterTypes
     .zip(input)
     .map { case (clazz, str) => toType(str, clazz) }
   constructor.newInstance(params).asInstanceOf[T]
 }
case class Person(
  firstName: String, 
  lastName: String, 
  middleName: String,
  age: Int
)

readStuff[MyStuff](inputs) { 
  case (0|1, s) => require(s.nonEmpty); s
  case (2, s) if s == null => "" 
  case (_, x: Int) => require(x > 0); x
  case x => x
}
问题是如何定义
验证程序
参数?
它看起来就像这样:

def readStuff[T](inputs: Seq[String])(validator: PartialFunction[(Int, Any), Any])
除了我需要以某种方式要求第一个
Any
和第二个
Any
的类型相同(尽管未知)(因此验证器的输出必须与输入的类型相同)

有什么想法吗