Scala中子类的特征中的默认类型类实现

时间:2016-09-04 19:03:46

标签: scala typeclass

我有以下关系:

trait Instrument

trait EquityOption extends Instrument { ... }
case class CallEquityOption(...) extends EquityOption
case class PutEquityOption(...) extends EquityOption

trait Priceable[I <: Instrument] { def price(I : Instrument) }

我可以对案例类PriceableCallEquityOption使用完全相同的PutEquityOption实现。通过match case区分Call...Put...。但是,如果我尝试在Priceable[EquityOption]下直接将其实现为object EquityOption,则无法找到隐式,因为它与该类型不完全匹配。

如何在不需要复制代码的情况下使其正常工作?

1 个答案:

答案 0 :(得分:3)

您必须证明您可以为EquityOption的每个子类型提供实例。

implicit def allEquityOptions[T <: EquityOption]: Pricable[T] = ???