Future[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)
将在线程上运行。为预先计算的结果分配线程是没有意义的。