代码之家  ›  专栏  ›  技术社区  ›  Omnipresent

未来方法参数的默认值

  •  0
  • Omnipresent  · 技术社区  · 7 年前

    是否有方法为类型为的方法参数提供默认值 Future ?

    我们可以做到:

    def myMethod(test: String = "") {...}
    

    但如果我们有未来呢

    def myMethod(test: Future[List[Color]]) {...} //How can I set default for this?
    
    1 回复  |  直到 7 年前
        1
  •  4
  •   prayagupa soxunyi    7 年前

    Future[A] 将包含

    • 类型的成功结果 A

    例子:

    scala> import scala.concurrent.Future
    import scala.concurrent.Future
    
    scala> val success = Future.successful("some data")
    success: scala.concurrent.Future[String] = Future(Success(some data))
    
    scala> val failed = Future.failed(throw new Exception("failed"))
    java.lang.Exception: failed
      ... 30 elided
    

    这意味着您可以将示例中的默认值指定为 Future.successful ,

    def myMethod(test: Future[List[Color]] = Future.successful(List.empty[Color])) {...}
    

    例子:

    scala> implicit val ec = scala.concurrent.ExecutionContext.global
    ec: scala.concurrent.ExecutionContextExecutor = scala.concurrent.impl.ExecutionContextImpl$$anon$3@3c8802cf[Running, parallelism = 8, size = 0, active = 0, running = 0, steals = 0, tasks = 0, submissions = 0]
    
    scala> def addLoyaltyPoints(previousLoyalty: Future[Int] = Future.successful(0)): Future[Int] = previousLoyalty.map(_ + 2)
    addLoyaltyPoints: (previousLoyalty: scala.concurrent.Future[Int])scala.concurrent.Future[Int]
    
    scala> addLoyaltyPoints()
    res16: scala.concurrent.Future[Int] = Future(<not completed>)
    
    scala> res16
    res17: scala.concurrent.Future[Int] = Future(Success(2))
    

    Future.successful(a) 而不是 Future(a) 因为 未来(a) 将在线程上运行。为预先计算的结果分配线程是没有意义的。

    推荐文章