查看我的库的一些 scala 文档,在我看来,值类中有一些不需要的噪音。例如:
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
}
最佳答案
在 Scala 2.11 中,您可以将 val 设为私有(private),从而解决此问题:
implicit class RichInt(private val i: Int) extends AnyVal {
def squared = i * i
}
关于scala - 值类引入了不需要的公共(public)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17944356/