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)
我怎么能告诉翻译人员这个烦人的方法呢?
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 中的字符串插值将使其变得更加多余。)