【发布时间】:2020-08-26 15:26:19
【问题描述】:
我有以下特质和职业:
sealed trait Signal
sealed trait Description[T]
final case class S1(name: String) extends Signal
final case class D1(name: String) extends Description[S1]
我试图实现的是,任何想要添加 Signal 的人都可以(在编译时)创建描述。
我不想更改Description 的签名,但肯定不会更改Signal 的签名
我将编译器设置为在警告时失败,因此我可以利用我的 ADT 已密封这一事实。
我的想法是有这样一个“编译守卫”:
def compilationGuard[S <: Signal](s: S): Description[S] = s match { case S1(name) => D1(name) }
但我收到以下错误:
<console>:17: error: type mismatch;
found : D1
required: Description[S]
def compilationGuard[S <: Signal](s: S): Description[S] = s match { case S1(name) => D1(name) }
^
【问题讨论】:
标签: scala generics types pattern-matching shapeless