【问题标题】:Implicit conversion on traits对特征的隐式转换
【发布时间】:2013-03-18 17:52:27
【问题描述】:

鉴于我有以下特点

trait Foo[T]{
  ...
}

我有使用此特征的案例类,我希望能够将 Foo[T] 隐式转换为 Foo[Z](例如)。

例如,如果我有一个具体的实现

case class Blah[Model] extends Foo[Model]

我有一个模型到视图的隐式转换......

我如何鼓励 Scala 将 Blah[Model] 转换为 Blah[View]

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

【问题讨论】:

    标签: scala generics implicit-conversion


    【解决方案1】:

    您必须明确定义如何使用更改的参数来构建特征:

    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!
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-21
      • 1970-01-01
      相关资源
      最近更新 更多