我在项目的多个地方都有这种代码:
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中最好/正确的书写方式,还是我们可以重构它。
答案 0 :(得分:2)
您没有提供有关类型X
或T
的任何相关信息,但是从您的示例代码看来,您可以执行以下操作。
def fun[P](param: P, url: String)(implicit x: X): Future[T] =
anotherFunction(x.someFunction(url), param).mapTo[T]
这假设someFunction()
在所有三个示例中都是相同的函数。 (就像anotherFunction()
一样。)