es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo usar una función implícita con dos parámetros en Scala?

He intentado estas dos opciones:

object DSChecker {
  implicit def checkImplFunction(dataset: Dataset[Row], config:Config): Checker = new Checker (dataset, config)
}

y

object DSChecker {
  implicit def checkImplFunction(dataset: Dataset[Row])(implicit config:Config): Checker = new Checker (dataset, config)
}

Compilan, pero el problema surge cuando necesito usarlos.

También he intentado varias combinaciones, pero no compilan…
(evalDifferences es una función “normal” dentro de la clase Checker)

// Sin argumentos implícitos en la función implícita
import DSChecker._
(df1, difConfig).evalDifferences(df2)

o

// Con config como argumento implícito en la función implícita
import DSChecker._
df1.evalDifferences(df2)

El problema siempre es el mismo… el compilador no encuentra el método “evalDifferences”.

¿Alguien puede ayudarme?

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema no está en las funciones implícitas en sí mismas, sino en cómo se están utilizando.

    En la primera función implícita, el parámetro config se está pasando como un parámetro regular. Por lo tanto, al utilizarlo, debes pasar explícitamente tanto el parámetro Dataset[Row] como el parámetro Config:

    import DSChecker._
    val checker = checkImplFunction(df1, difConfig)
    checker.evalDifferences(df2)
    

    En la segunda función implícita, el parámetro config se marca como implícito, lo que significa que el compilador buscará un valor implícito de tipo Config en el ámbito. Esto te permite utilizar el método evalDifferences sin pasar explícitamente el parámetro Config:

    import DSChecker._
    implicit val difConfig: Config = ...
    df1.evalDifferences(df2)
    

    Sin embargo, debes asegurarte de que el valor Config esté en el ámbito y marcado como implícito. De lo contrario, obtendrás un error de compilación.

Comments are closed.