Wertklassen führen unerwünschte öffentliche Methoden ein

Beim Betrachten einiger Scala-Docs meiner Bibliotheken stellte sich heraus, dass es unerwünschtes Rauschen von Wertklassen gibt. Zum Beispiel:

implicit class RichInt(val i: Int) extends AnyVal {
  def squared = i * i
}

Dies führt ein unerwünschtes Symbol eini:

4.i   // arghh....

Das Zeug erscheint sowohl in den Scala-Dokumenten als auch in der IDE-Autovervollständigung, was wirklich nicht gut ist.

Irgendwelche Ideen, wie dieses Problem gemildert werden kann? Ich meine, du kannst es benutzenRichInt(val self: Int) aber das macht es nicht besser (4.selfmit?)

BEARBEITEN:

Löscht der Compiler im folgenden Beispiel das Zwischenobjekt oder nicht?

import language.implicitConversions

object Definition {
  trait IntOps extends Any { def squared: Int }
  implicit private class IntOpsImpl(val i: Int) extends AnyVal with IntOps {
    def squared = i * i
  }
  implicit def IntOps(i: Int): IntOps = new IntOpsImpl(i)  // optimised or not?
}

object Application {
  import Definition._
  // 4.i  -- forbidden
  4.squared
}

Antworten auf die Frage(5)

Ihre Antwort auf die Frage