因此,我想确保大小写匹配中的提取器将在可能的情况下为别名提供正确的泛型类型。
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
吗?
答案 0 :(得分:2)
您可以尝试将类型参数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
}