我有以下关系:
trait Instrument
trait EquityOption extends Instrument { ... }
case class CallEquityOption(...) extends EquityOption
case class PutEquityOption(...) extends EquityOption
trait Priceable[I <: Instrument] { def price(I : Instrument) }
我可以对案例类Priceable
和CallEquityOption
使用完全相同的PutEquityOption
实现。通过match case
区分Call...
和Put...
。但是,如果我尝试在Priceable[EquityOption]
下直接将其实现为object EquityOption
,则无法找到隐式,因为它与该类型不完全匹配。
如何在不需要复制代码的情况下使其正常工作?
答案 0 :(得分:3)
您必须证明您可以为EquityOption
的每个子类型提供实例。
implicit def allEquityOptions[T <: EquityOption]: Pricable[T] = ???