Как выполнить рефакторинг похожих и повторяющихся функций в scala - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть такой код в нескольких местах в моем проекте:

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 голосов
/ 11 декабря 2018

Вы не предоставили никакой соответствующей информации о типах X или T, но из вашего примера кода вы можете сделать что-то вроде этого.

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

Это предполагает, что someFunction() одинаковая функция во всех трех примерах.(Аналогично для anotherFunction().)

...