scala – 值类引入了不必要的公共方法
发布时间:2020-12-16 09:21:42 所属栏目:安全 来源:网络整理
导读:看看我的图书馆的一些scala-docs,在我看来,价值类有一些不必要的噪音.例如: implicit class RichInt(val i: Int) extends AnyVal { def squared = i * i} 这引入了一个不需要的符号i: 4.i // arghh.... 这个东西出现在scala文档和IDE自动完成中,这真的不好
看看我的图书馆的一些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 } 解决方法
在Scala 2.11中,您可以使val私人,这修复了这个问题:
implicit class RichInt(private val i: Int) extends AnyVal { def squared = i * i } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |