我遇到Predef.any2stringadd
的问题,遗憾的是officially considered not a PITA。我从
trait Foo {
def +(that: Foo): Foo
}
到类型类方法
object Foo {
implicit def fooOps(f: Foo): Ops = new Ops(f)
final class Ops(f: Foo) {
def +(that: Foo): Foo = ???
}
}
trait Foo
现在我可以在编译代码中隐藏这个可怕的方法,如下所示:
import Predef.{any2stringadd => _}
但是,这在我的REPL / interpreter环境中失败了。
val in = new IMain(settings, out)
in.addImports("Predef.{any2stringadd => _}") // has no effect?
我怎样才能告诉口译员这种讨厌的方法呢?
答案 0 :(得分:1)
解决方法似乎是从Foo
的伴随对象中取出隐式转换,并将其放在顶层(我的实例中的包对象)中:
object Foo {
// implicit def fooOps(f: Foo): Ops = new Ops(f)
final class Ops(f: Foo) {
def +(that: Foo): Foo = ???
}
}
trait Foo
implicit def fooOps(f: Foo): Foo.Ops = new Foo.Ops(f)
虽然我不知道为什么会有任何不同,但似乎它足以使翻译忘记any2stringadd
。
(尽管如此,我认为应该打开一张新票据以试图删除该方法,同时考虑到Scala 2.10中的字符串插值将使其更加多余。)