2012-12-08 6 views
5

Predef.any2stringaddで問題が発生しました。残念ながらofficially considered not a PITAです。私は型クラスのアプローチVapourise Predef.any2stringadd in interpreter

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

trait Foo { 
    def +(that: Foo): Foo 
} 

から私のAPIを変更し今、私はでその恐ろしい方法は、このようなコードをコンパイル非表示にすることができます:

import Predef.{any2stringadd => _} 

しかし、これが失敗私のREPL /通訳環境では

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

どのように通訳者にこの厄介な方法を知らせることができますか?

答えて

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を忘れるのに十分であると思われます。

(ただし、このメソッドを削除するために新しいチケットを開く必要があります。スカラ2.10の文字列補間によって余分な余分なものになります)