5

Predef.any2stringadd不幸的是,我遇到了问题,官方认为它不是 PITA。我改变了我的 API 从

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/解释器环境中失败了。

val in = new IMain(settings, out)
in.addImports("Predef.{any2stringadd => _}") // has no effect?

我怎样才能告诉解释器蒸发这种烦人的方法?

4

1 回答 1

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 中的字符串插值会使它变得更加多余。)

于 2012-12-08T22:45:34.880 回答