翻译中的Vapourise Predef.any2stringadd

时间:2012-12-08 22:03:33

标签: scala implicit-conversion

我遇到Predef.any2stringadd的问题,遗憾的是officially considered not a 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 / interpreter环境中失败了。

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

我怎样才能告诉口译员这种讨厌的方法呢?

1 个答案:

答案 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中的字符串插值将使其更加多余。)