Scala - 在没有 new 关键字的情况下从匿名子 class 访问隐式 class
Scala - accessing an implicit class from an anonymous sub-class without the new keyword
在下面的 Scala 片段中,我的目标是为某些 class Collector
字面上写 Collector { "A" x 123 }
。这个匿名子 class 的主体应该可以访问在 class Collector
中定义的隐式 x
。
我试图通过伴随对象和别名参数来实现这一点,但没有成功。
现在我必须写 new Collector { "A" x 123 }
。你能在这里找到摆脱 new
关键字的方法吗?
object TestApp extends App {
new Collector { "A" x 123 } // works as intended, even without companion object
Collector { "A" x 123 } // does not compile because no implicit "x" found
}
class Collector { // some class with an individual implicit inner class
val coll = ArrayBuffer.empty[String]
implicit class MyImplicit(name: String) { def x(i: Int) = coll += s"$name($i)" }
}
object Collector { // getting rid of the "new" keyword looses access to MyImplicit
def apply(body: => Unit) = new Collector { body }
}
Collector { "A" x 123 }
不会创建Collector
的匿名子类,它只是一个方法调用。因此您无法在参数中访问 Collector
的成员,无论是否隐含。
在下面的 Scala 片段中,我的目标是为某些 class Collector
字面上写 Collector { "A" x 123 }
。这个匿名子 class 的主体应该可以访问在 class Collector
中定义的隐式 x
。
我试图通过伴随对象和别名参数来实现这一点,但没有成功。
现在我必须写 new Collector { "A" x 123 }
。你能在这里找到摆脱 new
关键字的方法吗?
object TestApp extends App {
new Collector { "A" x 123 } // works as intended, even without companion object
Collector { "A" x 123 } // does not compile because no implicit "x" found
}
class Collector { // some class with an individual implicit inner class
val coll = ArrayBuffer.empty[String]
implicit class MyImplicit(name: String) { def x(i: Int) = coll += s"$name($i)" }
}
object Collector { // getting rid of the "new" keyword looses access to MyImplicit
def apply(body: => Unit) = new Collector { body }
}
Collector { "A" x 123 }
不会创建Collector
的匿名子类,它只是一个方法调用。因此您无法在参数中访问 Collector
的成员,无论是否隐含。