2012-12-08 5 views
5

Ich habe ein Problem mit Predef.any2stringadd, die leider officially considered not a PITA ist. Ich änderte meine API vonVapourise Predef.any2stringadd im Interpreter

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

auf einen Typ Class-Ansatz

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

Jetzt kann ich diese schreckliche Methode in Code wie folgt zusammengestellt verstecken:

import Predef.{any2stringadd => _} 

Dies ist jedoch nicht in meiner REPL/Interpreter-Umgebung.

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

Wie kann ich dem Dolmetscher sagen, diese lästige Methode zu vaporisieren?

Antwort

1

Eine Abhilfe scheint die implizite Konvertierung von Foo ‚s Begleiter Objekt zu nehmen zu sein, und legen Sie sie in der oberen Hierarchie (Paketobjekt in meinem realen Fall):

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) 

Während ich nicht tun weiß, warum das einen Unterschied machen sollte, es scheint so, als ob der Dolmetscher die any2stringadd vergessen hat.

(Trotzdem denke ich, ein neues Ticket in einem Versuch, geöffnet werden soll, diese Methode zu entfernen, auch die Zeichenfolge Interpolation in Scala gegeben 2.10 wird es überflüssig machen.)