在哪里放置隐式值以启用关于单例类型的隐式转换

时间:2016-12-29 07:39:40

标签: scala implicit-conversion singleton-type

考虑这个案例:

class T[A0, B0](val a: A0, val b: B0)
class A
class B(val a: A) {
  b =>
  implicit def t: T[a.type, b.type] = new T(a, b)
}
val b = new B(new A)
val t1 = implicitly[T[b.a.type, b.type]]// can't compile, I want t1 = b.t

如何启用单例类型参数的隐式转换?

考虑权衡:

class T[A0, B0, H0](val a: A0, val b: B0)
class A
class B(val a: A) {
  b =>
  class H
  object H{
    implicit def t: T[a.type, b.type, b.H] = new T(a, b)        
  }
}
val a = new A
val b = new B(a)
val t1 = implicitly[T[b.a.type, b.type, b.H]]

这很有效,但看起来很难看。有什么好方法吗?

1 个答案:

答案 0 :(得分:0)

我们可以添加import b._

class T[A0, B0](val a: A0, val b: B0)
class A
class B(val a: A) {
  b =>
  implicit def t: T[a.type, b.type] = new T(a, b)
}
val b = new B(new A)
import b._
val t1 = implicitly[T[b.a.type, b.type]]