Klasy wartości wprowadzają niepożądane metody publiczne
Patrząc na niektóre scala-docy moich bibliotek, wydawało mi się, że istnieją pewne niepożądane szumy z klas wartości. Na przykład:
implicit class RichInt(val i: Int) extends AnyVal {
def squared = i * i
}
Wprowadza to niepożądany symboli
:
4.i // arghh....
Te rzeczy pojawiają się zarówno w dokumentach scala, jak iw automatycznym uzupełnianiu IDE, co nie jest dobre.
Więc ... wszelkie pomysły na złagodzenie tego problemu? To znaczy, możesz użyćRichInt(val self: Int)
ale to nic nie poprawia (4.self
, co?)
EDYTOWAĆ:
Czy w poniższym przykładzie kompilator usuwa obiekt pośredni, czy nie?
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
}