Classes de valor introduzem métodos públicos indesejados
Olhando para alguns scala-docs das minhas bibliotecas, pareceu-me que há algum ruído indesejado das classes de valor. Por exemplo:
implicit class RichInt(val i: Int) extends AnyVal {
def squared = i * i
}
Isto introduz um símbolo indesejadoi
:
4.i // arghh....
Esse material aparece nos documentos do scala e no preenchimento automático do IDE, o que não é realmente bom.
Então ... alguma ideia de como mitigar esse problema? Quer dizer que você pode usarRichInt(val self: Int)
mas isso não melhora nada (4.self
wth?
EDITAR:
No exemplo a seguir, o compilador apaga ou não o objeto intermediário?
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
}