因此,如果可能的话,我想确保案例匹配中的提取器会为其提供正确的泛型类型的别名。
trait MyT[A]
case class MyC[A](t: MyT[A])
def foo: MyC[_]
def go[A](t: MyT[A]): Option[MyC[A]] = foo match {
case m@MyC(`t`) => Some(m.copy(t = t))
case _ => None
}
这是有效的,但我宁愿不做m.copy(t = t)
。基本上m@
将绑定到MyC[Any]
,但我希望它绑定到MyC[A]
。这可能吗,也许有一个自定义的unapply
?
您可以尝试将类型参数A
显式地归因于模式匹配的MyC
,并通过@unchecked
:消除警告
trait MyT[A]
case class MyC[A](t: MyT[A])
def foo: MyC[_] = ???
def go[A](t: MyT[A]): Option[MyC[A]] = foo match {
case m: MyC[A @unchecked] if (m.t == t) => Some(m)
case _ => None
}