如何在Scala中重构相似和重复的功能

时间:2018-12-11 00:31:58

标签: scala refactoring dry

我在项目的多个地方都有这种代码:

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中最好/正确的书写方式,还是我们可以重构它。

1 个答案:

答案 0 :(得分:2)

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

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

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