scala.concurrent.Future的类型是什么?



我试着了解scala.concurrent.Future的数据类型是什么?

我从 scala lang 文档中找到了以下类型,但仍然不确定它们之间的差异,以及何时使用哪一种?

trait Future[+T] extends Awaitable[T] //for concurrent programming
object Future extends AnyRef //not sure?
http://www.scala-lang.org/api/2.9.3/scala/concurrent/Future.html
http://www.scala-lang.org/api/2.9.3/scala/concurrent/Future$.html

抱歉,但我的印象是,您首先需要获得一些scala基础,什么是trait,什么是companion对象以及其他东西。

回到你的问题。 当您想并发执行某些内容时,可以将其包装在Future中。你的代码有一些输出类型(SomeType,可能是Unit- 相当于void),包装成Future后你会得到Future[SomeType]- 它是特质Future[+T]的扩展。比你需要一些执行上下文(线程池)来执行你的Future

尝试查找并阅读由Martin Odersky,Lex Spoon和Bill Venners撰写的"Programming in Scala",非常适合初学者。

像集合(ListArray等)一样,Future是处理/处理另一种类型的类型。一个有用的比较是Option类型。

正如Option[Int]可能是Int值(也可能不是),Future[Int]可能不是Int值。可能是Int值仍在计算中,或者从数据库表中提取,或者从远程网络位置检索。无论原因是什么,如果这是一个缓慢的过程,就没有理由等待它。把它变成一个Future[Int],以便你的程序可以继续执行其他重要任务。

至于object Future,这是一个单例对象,它有一些处理/操作现有Future元素的方法。Future.sequence()是一个有用的例子。

目前还不清楚您是在谈论特征Future还是单例对象Future。我会回答这两个问题。

特征没有类型。它是一种类型。

所有单例对象foo具有单例类型foo.type,因此单例对象Future具有单例类型Future.type

在 Scala 中,object是一个单例类,这意味着在应用程序运行时只存在一个实例。有几种方法可以在大多数语言中实现单例,但大多数情况下,您会面临一些问题,例如线程安全。Scala 的object负责为您实现此模式。

Scala 中的一个常见模式是创建一个与class同名的object,就像您示例中的那个一样。这称为伴随对象。这些方法的常见用途是基本上定义 Java 中static方法的等效项。可以声明所有实例通用的方法,也可以声明处理和操作class实例的方法。例如,在 Java 中,您可以将它们声明为class本身的主体中的static。在这种情况下,伴随对象可帮助您分离关注点。

最新更新