如何使用带有两个参数的隐式函数(Scala)?
How can I use an implicit function with two parameters (Scala)?
我试过这两个选项:
object DSChecker {
implicit def checkImplFunction(dataset: Dataset[Row], config:Config): Checker = new Checker (dataset, config)
}
和
object DSChecker {
implicit def checkImplFunction(dataset: Dataset[Row])(implicit config:Config): Checker = new Checker (dataset, config)
}
它们可以编译,但问题是当我需要两个时使用它们。
我也尝试过多种组合,但它们无法编译...
(evalDifferences 是 clas Checker 中的一个“普通”函数)
//Whithout implicit args in implicit function
import DSChecker._
(df1, difConfig).evalDifferences(df2)
或
// With config as implicit arg in implicit funciton
import DSChecker._
df1.evalDifferences(df2)
问题总是一样的...编译器找不到“evalDifferences”方法。
有人可以帮助我吗?
试试 Tuple
:
object DSChecker {
implicit def checkImplFunction(data: (Dataset[Row], Config)): Checker = new Checker (data._1, data._2)
}
那么,这应该有效:
//Whithout implicit args in implicit function
import DSChecker._
(df1, difConfig).evalDifferences(df2)
对于你的情况,我认为扩展方法更适合:
object DSChecker {
implicit class DfExtension(df: Dataframe) {
def checker(implicit config: Config) = {
new Checker(df, config)
}
}
}
df1.checker.evalDifferences(df2)
您也可以直接公开 evalDifferences
作为扩展方法。
我试过这两个选项:
object DSChecker {
implicit def checkImplFunction(dataset: Dataset[Row], config:Config): Checker = new Checker (dataset, config)
}
和
object DSChecker {
implicit def checkImplFunction(dataset: Dataset[Row])(implicit config:Config): Checker = new Checker (dataset, config)
}
它们可以编译,但问题是当我需要两个时使用它们。
我也尝试过多种组合,但它们无法编译... (evalDifferences 是 clas Checker 中的一个“普通”函数)
//Whithout implicit args in implicit function
import DSChecker._
(df1, difConfig).evalDifferences(df2)
或
// With config as implicit arg in implicit funciton
import DSChecker._
df1.evalDifferences(df2)
问题总是一样的...编译器找不到“evalDifferences”方法。
有人可以帮助我吗?
试试 Tuple
:
object DSChecker {
implicit def checkImplFunction(data: (Dataset[Row], Config)): Checker = new Checker (data._1, data._2)
}
那么,这应该有效:
//Whithout implicit args in implicit function
import DSChecker._
(df1, difConfig).evalDifferences(df2)
对于你的情况,我认为扩展方法更适合:
object DSChecker {
implicit class DfExtension(df: Dataframe) {
def checker(implicit config: Config) = {
new Checker(df, config)
}
}
}
df1.checker.evalDifferences(df2)
您也可以直接公开 evalDifferences
作为扩展方法。