2012-08-01 22 views
6

Ich habe ein Problem mit implicit Funktion, aus einem Paket importiert.scala: implizite Konvertierung funktioniert nicht

Ich habe eine Klasse, die Regex verwendet, um etwas in einem Text zu finden. Ich möchte es benutzen, wie:

val pattern = "some pattern here".r           
pattern findSomethingIn some_text            

Dazu definiere ich eine implicit finction pattern zu einem Wrapper Wrapper zu konvertieren, die findSomethingIn Funktion

package mypackage {               

    class Wrapper (val pattern: Regex) {          
    def findSomethingIn(text: String): Something = ...      
    }                   

    object Wrapper {               
    implicit def regex2Something(pat: Regex): Wrapper = new Wrapper(pat) 
    }                   

}                    

wenn ich es als

enthält
import mypackage._               

Wrapper.regex2Something(pattern) findSomethingIn some_text     

es funktioniert. während, wenn i

pattern findSomethingIn some_text // implicit should work here??    

I

value findPriceIn is not a member of scala.util.amtching.Regex    

bekommen verwenden, so die implizite Konvertierung funktioniert hier nicht ... Was ist das Problem?

Antwort

9

Sie werden

brauchen
import mypackage.Wrapper._ 

die entsprechenden Methoden zu importieren.

Weitere Informationen finden Sie unter this blog entry. Beachten Sie insbesondere die Definition/den Import des Objekts Conversions.

3

Brians Antwort ist am besten, wenn eine Alternative ein Paketobjekt

package object mypackage {               
    implicit def regex2Something(pat: Regex): Wrapper = new Wrapper(pat) 
} 

Dieses Sie Ihre ursprüngliche import mypackage._ Linie verwenden, können verwendet werden würde, da die implizite def in der Verpackung selbst sein wird.

http://www.scala-lang.org/docu/files/packageobjects/packageobjects.html

Verwandte Themen