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.self
mit?)
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
}