trait OptionTransaction {
def data: Data
}
BuyOptionTransaction extends OptionTransaction
SellOptionTransaction extends OptionTransaction
我使用這些有格式類型的類來創建各種交易
trait Formatter[T] {
def format(ot:T):String
}
object Formatter {
def apply[T](implicit screen: Formatter[T]) = screen
implicit val buyOT = new Formatter[BuyOptionTransaction] {
def format(ot: BuyOptionTransaction):String = ot.x.toString
}
implicit val sellOT = new Formatter[SellOptionTransaction] {
def format(ot: SellOptionTransaction):String = ot.y.toString
}
}
的字符串表示這是切入點:
import Formatter._
val closeTransactions: List[OptionTransaction] = ...
closeTransactions.map(startFormat)
問題是closeTransactions
有類型List[OptionTransaction]
和類型類需要OptionTransaction
downcast到BuyOptionTransaction
或SellOptionTransaction
否則它將不會找到隱式格式化程序。
我該如何自動實現這種下降?
您可以更改'OptionTransaction'及其派生類的定義嗎?通常情況下,可以將抽象的'format'添加到'OptionTransaction'並在派生類中根據需要實現它,從而獲得非常簡單和高效的解決方案。 – Suma
如果我對我很熟悉......我想我已經回答了一個類似的問題,以便可以將其標記爲重複:[通過隱式證據獲取運行時類型](https://stackoverflow.com/questions/ 42292338/get-runtime-type-by-implicit-evidence/42293934#42293934) – Suma