我有一个 F 有界类型Sys
:
trait Sys[S <: Sys[S]]
还有一些将其作为类型参数的特征:
trait Foo[S <: Sys[S]]
假设我有一个要使用 a 调用的方法Foo
:
def invoke[S <: Sys[S]](foo: Foo[S]) = ()
假设我有一个模型更新类型和一个子类型,它带有Foo
:
sealed trait Update
case class Opened[S <: Sys[S]](foo: Foo[S]) extends Update
注册模型观察者的辅助函数:
def observe(pf: PartialFunction[Update, Unit]) = ()
现在以下失败:
observe {
case Opened(foo) => invoke(foo)
}
和
<console>:16: error: inferred type arguments [Any] do not conform to method invoke's
type parameter bounds [S <: Sys[S]]
case Opened(foo) => invoke(foo)
^
如果Sys
, Foo
, invoke
, Update
,Opened
和observe
被给定,我如何修复偏函数。允许将值或类型成员添加到Foo
.