2012-08-01 21 views
6

Tengo un problema con la función implicit, importado de un paquete.scala: la conversión implícita no funciona

Tengo una clase que usa Regex para encontrar algo en un texto. Me gustaría utilizarlo como:

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

Para hacerlo, definen un finction implicit para convertir pattern a una envoltura de Wrapper que contiene findSomethingIn función

package mypackage {               

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

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

}                    

si lo uso como

import mypackage._               

Wrapper.regex2Something(pattern) findSomethingIn some_text     

funciona. mientras que si yo uso

pattern findSomethingIn some_text // implicit should work here??    

consigo

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

por lo que la conversión implícita no funciona aquí ... ¿Cuál es el problema?

Respuesta

9

Tendrá

import mypackage.Wrapper._ 

para importar los métodos apropiados.

Consulte this blog entry para obtener más información, y tenga en cuenta en particular la definición/importación del objeto Conversions.

3

respuesta de Brian es mejor, aunque una alternativa sería utilizar un objeto de paquete

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

Esto le permitirá utilizar su línea original import mypackage._, ya que la definición implícita estará en el propio envase.

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

Cuestiones relacionadas