如何在 Scala 中重构相似和重复的函数

How to refactor similar and repetitive functions in scala

我的项目中多处都有这种代码:

def fun1(paramA: A, url: String)(implicit x: X): Future[T] = {
  val select = x.someFunction(url)
  val res = anotherFunction(select, paramA).mapTo[T]
  res
}

def fun2(paramB: B, url: String)(implicit x: X): Future[T] = {
  val select = x.someFunction(url)
  val res = anotherFunction(select, paramB).mapTo[T]
  res
}

def fun3(paramC: C, url: String)(implicit x: X): Future[T] = {
  val select = x.someFunction(url)
  val res = anotherFunction(select, paramC).mapTo[T]
  res
}

感觉没有跟DRY。此外,每当我需要更改某些内容时,我都必须更新所有方法的代码。

我最近开始使用 Scala 编写代码,之前我使用的是 Ruby,它不是类型化语言。我不确定这是用 Scala 编写的 best/correct 方式,或者我们可以重构它。

您尚未提供有关类型 XT 的任何相关信息,但从您的示例代码看来,您可以执行类似的操作。

def fun[P](param: P, url: String)(implicit x: X): Future[T] =
  anotherFunction(x.someFunction(url), param).mapTo[T]

这假设 someFunction() 在所有三个示例中都是相同的函数。 (同样适用于 anotherFunction()。)