簡體   English   中英

如何使用帶有兩個參數(Scala)的隱式 function?

[英]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 中的“正常” function)

//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直接公開為擴展方法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM