【问题标题】:How can I use an implicit function with two parameters (Scala)?如何使用带有两个参数的隐式函数(Scala)?
【发布时间】:2022-01-05 11:53:56
【问题描述】:

我已经尝试了这两个选项:

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”方法。

有人可以帮我吗?

【问题讨论】:

  • 听起来您可能正在寻找扩展方法。

标签: scala functional-programming implicit


【解决方案1】:

在你的情况下,我认为扩展方法更适合:

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

df1.checker.evalDifferences(df2)

你也可以直接暴露evalDifferences作为扩展方法。

【讨论】:

    【解决方案2】:

    试试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)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-02
      • 1970-01-01
      • 2011-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多