gpt4 book ai didi

scala - 值类引入了不需要的公共(public)方法

转载 作者:行者123 更新时间:2023-12-03 20:42:20 28 4
gpt4 key购买 nike

查看我的库的一些 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/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com