3

私が次の特性を持っているとします

trait Foo[T]{
  ...
}

この特性を使用するケース クラスがあり、暗黙のうちに Foo[T] を Foo[Z] に変換できるようにしたいと考えています (たとえば)。

たとえば、具体的な実装がある場合

case class Blah[Model] extends Foo[Model]

そして、モデルからビューへの暗黙的な変換があります...

Blah[Model]Scala に への変換を促すにはどうすればよいBlah[View]ですか?

trait Foo[T]{
  ...
  // not sure what to do here! 
  implicit def convertTtoZ .... (implicit converter: T=>Z) ...
}
4

1 に答える 1

3

パラメータを変更して特性を構築する方法を明示的に定義する必要があります。

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] = X@21606a56

scala> def xnRequired(xn: X[N]) { println("Hi!") }
xnRequired: (xn: X[N])Unit

scala> xnRequired(xm)
Hi!
于 2013-03-18T18:00:08.083 に答える