2013-03-18 86 views
3

鑑於我有以下性狀上性狀隱式轉換

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) ... 
} 

回答

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] = [email protected] 

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

scala> xnRequired(xm) 
Hi!