Посмотрев на некоторые 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
, wth?)
ИЗМЕНИТЬ
В следующем примере компилятор удаляет промежуточный объект или нет?
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
}