我有一个隐式类,需要在运行时使用给定的参数。所以我在另一个类中定义了这个隐式,该类在构造函数中接受这个参数。我正在做的事情的简化版本如下:
case class A(p1: String) {
def foo = println("foo: " + p1)
}
class B(p2: String) {
implicit class Enhancer(a: A) {
implicit def bar = s"bar: ${a.p1}, $p2"
}
}
因此,当我需要使用这个类时,我会执行以下操作:
val a = A("x")
val b = new B("y")
import b._
a.bar
我想知道是否有比以上更整洁的方法?特别是中间两行,我在其中定义对象,然后从中导入。例如,有没有办法用一行调用来返回我需要的隐式类?
尝试向Enhancer
添加隐式参数。
case class A(p1: String) {
def foo = println("foo: " + p1)
}
class B(val p2: String)
implicit class Enhancer(a: A)(implicit b: B) {
implicit def bar = s"bar: ${a.p1}, ${b.p2}"
}
val a = A("x")
implicit object b extends B("y")
a.bar
或
implicit val b = new B("y")
a.bar
或
implicit class Enhancer(val a: A) extends AnyVal {
implicit def bar(implicit b: B) = s"bar: ${a.p1}, ${b.p2}"
}