【发布时间】:2014-01-07 21:51:14
【问题描述】:
我有一个 F 有界类型Sys:
trait Sys[S <: Sys[S]]
还有一些将其作为类型参数的特征:
trait Foo[S <: Sys[S]]
假设我有一个使用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 添加值或类型成员。
【问题讨论】:
标签: scala pattern-matching existential-type type-bounds bounded-quantification