は、私は、次のしている:基本特性からの戻り子タイプに型クラスのパターンと
trait Grabber[A, B] {
def name: String
def grab(a: A): Option[B]
}
object Grabber {
implicit def toBooleanGrabber[A](s: String, f: A => Option[Boolean]) =
new BooleanGrabber[A] {
override val name: String = s
override def grab(a: A): Option[Boolean] = f(a)
}
implicit def toDoubleGrabber[A](s: String, f: A => Option[Double]) =
new DoubleGrabber[A] {
override val name: String = s
override def grab(a: A): Option[Double] = f(a)
}
implicit def toLongGrabber[A](s: String, f: A => Option[Long]) =
new LongGrabber[A] {
override val name: String = s
override def grab(a: A): Option[Long] = f(a)
}
def apply[A, B](
s: String,
f: A => Option[B]
)(implicit ev: (String, A => Option[B]) => Grabber[A, B]): Grabber[A, B] =
ev(s, f)
}
trait BooleanGrabber[A] extends Grabber[A, Boolean]
trait DoubleGrabber[A] extends Grabber[A, Double]
trait LongGrabber[A] extends Grabber[A, Long]
をapply
方法が正常に動作しますが、(その明示的な定義ごとに)それはGrabber[A, B]
を返します。 Grabber[A, B]
の子を返すようにapply
メソッドのシグニチャを変更する方法はありますか?たとえば、toBooleanGrabber
を使用する呼び出しでは、Grabber[T, Boolean]
ではなく、BooleanGrabber[T]
が返されるのが理想的です。
なぜ具体的なタイプが必要なのですか?意味、あなたは理由のためにそれを抽象化していますが、今私は思う目的を敗北させる種類の基礎を知る必要があります。 –