关联类型声明中的参数

时间:2017-08-03 16:47:05

标签: scala type-parameter

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

 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
}

问题是如何定义validator参数?
这几乎看起来像这样:

def readStuff[T](inputs: Seq[String])(validator: PartialFunction[(Int, Any), Any])

除了我需要以某种方式要求第一个Any和第二个Any是相同的(尽管是未知的)类型(以便验证器的输出必须是输入的类型相同。)

有什么想法吗?

0 个答案:

没有答案