Классы значений вводят нежелательные публичные методы
Глядя на некоторые scala-docs моих библиотек, мне показалось, что есть некоторый нежелательный шум от классов значений. Например:
implicit class RichInt(val i: Int) extends AnyVal {
def squared = i * i
}
Это вводит нежелательный символi
:
4.i // arghh....
Этот материал появляется и в документах Scala, и в автозаполнении IDE, что на самом деле не очень хорошо.
Итак ... есть идеи, как смягчить эту проблему? Я имею в виду, вы можете использоватьRichInt(val self: Int)
но это не делает это немного лучше (4.self
что?)
РЕДАКТИРОВАТЬ:
В следующем примере компилятор стирает промежуточный объект или нет?
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
}