【发布时间】:2013-07-30 10:37:03
【问题描述】:
查看我的库的一些 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
}
【问题讨论】:
-
我会说让它
private或失去限定符,但显然这对于值类是不允许的。所以我想答案是:你不能。 -
或者更好:
4.i.i.i.i.i.i
标签: scala visibility named-parameters value-class