我有一个类A,它还定义了对B的隐式转换。
case class A(number:Int)
case class B(number:Int, tag:String)
implicit def AtoB(a:A) = B(a.number,"Hello World")我还有一个检索A的函数,并希望调用一个以参数隐式B为参数的函数。
def hello()(implicit b:B)= {....}
def execute = {
implicit val a:A = ....
hello() //doesnt compile missing implicit parameter b
}在不显式定义B的情况下,如何才能使这些代码工作呢?i.e
val b:B = a发布于 2016-02-29 14:32:05
定义如下函数:
implicit def implicitBfromA(implicit a: A): B = a并在调用hello时将其放在作用域中,或者将其放入B的伴生对象中。
此函数不是隐式转换。它指出,如果在作用域中已经存在可用类型B的隐式值,则存在类型A可用的隐式值。
注意,要使它正常工作,应该在文件中的AtoB之后定义它,或者AtoB应该具有显式指定的返回类型:implicit def AtoB(a:A): B = B(a.number, "Hello World"),或者您应该在它的主体:implicit def implicitBfromA(implicit a: A): B = AtoB(a)中显式调用AtoB。
一个完整的工作实例:
case class A(number: Int)
case class B(number: Int, tag: String)
object B {
implicit def implicitB(implicit a: A): B = a
}
implicit def AtoB(a:A): B = B(a.number, "Hello World")
def hello()(implicit b: B) = b.number.toString + b.tag
def execute = {
implicit val a: A = A(10)
hello()
}https://stackoverflow.com/questions/35701451
复制相似问题