翻译中的Vapourise Predef.any2stringadd

0__*_*0__ 5 scala implicit-conversion

我有问题Predef.any2stringadd,不幸的是,官方认为不是PITA.我改变了我的API

trait Foo {
   def +(that: Foo): Foo
}
Run Code Online (Sandbox Code Playgroud)

类型类方法

object Foo {
   implicit def fooOps(f: Foo): Ops = new Ops(f)
   final class Ops(f: Foo) {
      def +(that: Foo): Foo = ???
   }
}
trait Foo
Run Code Online (Sandbox Code Playgroud)

现在我可以在编译代码中隐藏这个可怕的方法,如下所示:

import Predef.{any2stringadd => _}
Run Code Online (Sandbox Code Playgroud)

但是,这在我的REPL/interpreter环境中失败了.

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

我怎么能告诉翻译人员这个烦人的方法呢?

0__*_*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)
Run Code Online (Sandbox Code Playgroud)

虽然我不知道为什么这会产生任何影响,但它似乎足以让解释器忘记any2stringadd.

(不过,我认为应该开一张新票来尝试删除该方法,同时考虑到 Scala 2.10 中的字符串插值将使其变得更加多余。)