简体   繁体   English

如何使用带有两个参数(Scala)的隐式 function?

[英]How can I use an implicit function with two parameters (Scala)?

I've tried this two options:我试过这两个选项:

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

and

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

They compile, but the problem is when I need two use them.他们编译,但问题是当我需要两个使用它们时。

I've tried also multiple combinations, but they don't compile... (evalDifferences is a "normal" function inside clas Checker)我也尝试了多种组合,但它们无法编译......(evalDifferences 是 clas Checker 中的“正常” function)

//Whithout implicit args in implicit function
import DSChecker._
(df1, difConfig).evalDifferences(df2)

or或者

// With config as implicit arg in implicit funciton
import DSChecker._
df1.evalDifferences(df2)

The problem is always the same... the compilator doesn't find "evalDifferences" method.问题总是一样的......编译器找不到“evalDifferences”方法。

Can someone help me?有人能帮我吗?

Try with Tuple :尝试使用Tuple

object DSChecker {
  implicit def checkImplFunction(data: (Dataset[Row], Config)): Checker = new Checker (data._1, data._2)
}

Then, this should work:然后,这应该工作:

//Whithout implicit args in implicit function
import DSChecker._
(df1, difConfig).evalDifferences(df2)

In your case, I think extension method fits better:在您的情况下,我认为扩展方法更适合:

object DSChecker {
  implicit class DfExtension(df: Dataframe) {
    def checker(implicit config: Config) = {
      new Checker(df, config)
    }
  }
}

df1.checker.evalDifferences(df2)

You can also expose evalDifferences directly as extension method.您还可以将evalDifferences直接公开为扩展方法。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM