Scala中的PartialFunction类型推断

asa*_*ayn 2 scala type-inference

让我们考虑以下功能:

def printPfType[T](pf:PartialFunction[T, _])(implicit m:Manifest[T]) = {
  println(m.toString)
}
Run Code Online (Sandbox Code Playgroud)

然后我定义以下测试类:

case class Test(s:String, i:Int)
Run Code Online (Sandbox Code Playgroud)

我写不出来:

printPfType {
  case Test(_,i) => i
}
Run Code Online (Sandbox Code Playgroud)

因为编译器无法推断出PartialFunction的第一个参数类型.我必须明确指定它:

printPfType[Test] {
  case Test(_,i) => i
}
Run Code Online (Sandbox Code Playgroud)

但那时Test类型会出现两次.有没有一种技术可以避免这种情况?如何帮助类型提供者避免重复?

Vas*_*iuk 5

看到这个帖子.类型推断无法处理此问题.从规范中引用:

匿名函数可以由一系列案例定义{case p1 => b1...case pn => bn},它显示为没有先前匹配的表达式.必须部分地定义这种表达式的预期类型.它必须是scala.Functionk [S1 ,. ..某些k> 0的sc,R,或scala.PartialFunction [S1,R],其中参数类型为S1 ,. ..,Sk必须完全确定,但结果类型R可能未确定.