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 的成员,无论是否隐含。