上性状隐式转换
问题描述:
鉴于我有以下性状上性状隐式转换
trait Foo[T]{
...
}
我有使用这种性状,我希望能够隐式转换的Foo [T]成富[Z](例如case类)。
举例来说,如果我有一个具体的实施
case class Blah[Model] extends Foo[Model]
我有模型的隐式转换查看...
如何鼓励斯卡拉Blah[Model]
转换为Blah[View]
?
trait Foo[T]{
...
// not sure what to do here!
implicit def convertTtoZ .... (implicit converter: T=>Z) ...
}
答
你必须明确地定义了如何建立具有改变参数性状:
scala> import language.implicitConversions
scala> class M
defined class M
scala> class N
defined class N
scala> implicit def m2n(m: M): N = new N
m2n: (m: M)N
scala> class X[A](val a: A) {}
defined class X
scala> implicit def xa2xb[A,B](x: X[A])(implicit ab: A => B) = new X(ab(x.a))
xa2xb: [A, B](x: X[A])(implicit ab: A => B)X[B]
scala> val xm = new X(new M)
xm: X[M] = [email protected]
scala> def xnRequired(xn: X[N]) { println("Hi!") }
xnRequired: (xn: X[N])Unit
scala> xnRequired(xm)
Hi!