Scala:通用函数以未知arity作为参数的函数

时间:2018-01-11 14:24:23

标签: scala generics

我有一些像这些功能(我不知道arity,我只知道返回的类型为Future[T]):

def a(a: Int): Future[String] = { Future("a") }
def b(b: Long): Future[Double] = { Future(1.0) }

我想写一个可以像这样使用的泛型函数WithLoading

def a(a: Int): Future[String] = WithLoading { Future("a") }
def b(b: Long, c: Int): Future[Double] = WithLoading { Future(1.0) }

并将执行与以下相同的结果:

def a(a: Int): Future[String] = { var loading = true; Future("a").map (_ =>  loading = false) }
def b(b: Long): Future[Double] = { var loading = true; Future(1.0).map (_ =>  loading = false) }

有可能这样做吗?如果答案是肯定的,你能给我一些建议吗?

1 个答案:

答案 0 :(得分:1)

似乎WithLoading根本不需要了解arity。

def withLoading[T](action: => Future[T]): Future[T] = {
  doSmthWithLoading
  val triggeredAction = action
  val result = triggeredAction.onComplete(r => {
    cleanupSmth
  })
  result
}