Scala 使用Trait w/Implicits的Case类中的类型参数

Scala 使用Trait w/Implicits的Case类中的类型参数,scala,Scala,假设我们有一个特点: trait ThingToThing[-A, +B] { def apply(a: A): B } 以及它的伴星: object ThingToThing { implicit object StringToBoolean extends ThingToThing[String, Boolean] { override def apply(a: String): Boolean = a.toBoolean } } 和一个案例类: case class T

假设我们有一个特点:

trait ThingToThing[-A, +B] { def apply(a: A): B }
以及它的伴星:

object ThingToThing {
  implicit object StringToBoolean extends ThingToThing[String, Boolean] {
    override def apply(a: String): Boolean = a.toBoolean
  }
}
和一个案例类:

case class Thing[A](a: A) {
  def to[B](implicit thing: ThingToThing[A, B]): B = thing(a)
}
这允许我执行以下操作:

Thing("true").to[Boolean]
res0: Boolean = true
这一切都很好,我可以这样做:

case class MyClass(ss: Seq[String]) {
  def doStuff(s: String) = Thing(s).to[Boolean]
}
case class MyClass[B](ss: Seq[String]) {
  def doStuff(s: String) = Thing(s).to[B]
}
但是,我想做的是:

case class MyClass(ss: Seq[String]) {
  def doStuff(s: String) = Thing(s).to[Boolean]
}
case class MyClass[B](ss: Seq[String]) {
  def doStuff(s: String) = Thing(s).to[B]
}
但是,这与以下错误有关:

error: could not find implicit value for parameter thing: ThingToThing[String,B]
有没有办法在我的
MyClass
中使用类型参数


**不要沉迷于将字符串转换为布尔值的玩具示例;我只是用这个简单的例子来说明这个问题。

编译器在调用站点
中找不到
ThingToThing[String,B]
B
未知)。to[B]

case class MyClass[B](ss: Seq[String]) {
  def doStuff(s: String) = Thing(s).to[B]
}
这就是错误

您可以在构造函数中声明所需的隐式,以便在对象创建的调用站点中解析它(当
B
已知时):

,或在方法中声明它,以便在方法调用的调用站点中解析它(当
B
已知时):


好极了非常感谢你!