scala 为什么隐式转换不适用于PartialFunction

relj7zay  于 2022-11-09  发布在  Scala
关注(0)|答案(1)|浏览(146)

假设我定义了以下内容:

type Func1 = PartialFunction[Int, String]
case class A(f: Int => String)
implicit def toA(func: Func1): A = A(func(_))

然后,我可能希望使用隐式转换,如下所示:

val a: A = {
    case i: Int => i.toString
}

但现在这确实可以编译了。但是,显式使用该函数是可以的:

val a: A = toA({
    case i: Int => i.toString
})

这是为什么?

fdx2calv

fdx2calv1#

val f = {
  case i: Int => i.toString
}

也不编译:
扩展函数缺少参数类型
匿名函数的参数类型必须完全已知。(SLS 8.5)
预期类型为:?
val f = {
根据Scaladoc的说法,工作代码是

val f: PartialFunction[Int, String] = {
  case i: Int => i.toString
}

如果想要隐式转换,请尝试

val a: A = {
  case i: Int => i.toString
} : PartialFunction[Int, String]

相关问题