未来的价值取决于它是否已绑定到变量?

存在

代码:

import scala.concurrent.Future
import scala.util.{Failure, Success}
import scala.concurrent.ExecutionContext.Implicits.global

/**
  * Created by IDEA on 12/23/16.
  */
object Demo extends App {
  val fut = Future {
    Thread.sleep(100)
    21 + 21
  }
  val f = Future { 5 }
  Thread.sleep(200)
  val fut1 = fut.map(_ + 1)
  println(fut1) // Future(Success(43))
  println(fut1.value) // Some(Success(43))
  println(fut.map(_ + 1).value) // None
  fut.map(_ + 1).onComplete {
    case Success(v) => println(v)
    case Failure(e) => println(e)
  } // 43

  (for {
    x <- Future {Thread.sleep(100); 21 + 21}
    y <- Future {Thread.sleep(100); 21 + 22}
  } yield x + y).andThen {
    case Success(v) => println(v)
  }
  Thread.sleep(5000)
}

请注意以下两者之间的区别:

println(fut1.value) // Some(Success(43))
println(fut.map(_ + 1).value) // None

即,将Future赋值给变量后取回Future的值给了我Some(Success(43)),而直接取回给定了None为什么?

还要注意onComplete,尽管方法println(fut.map(_ + 1).value)在行后被调用,但它产生了预期的行为

斯卡拉2.12.0

马思

fut.map(_ + 1)返回一个new Future,它.value可能尚未完成。如果还没有,那么你得到Noneprintln节目,否则你会得到Some(Success(43))

您可以在REPL中看到以下内容:

// Paste the body of your Demo object before
// Then repeatedly call the last println:

scala>   println(fut.map(_ + 1).value) // None
Some(Success(43))

scala>   println(fut.map(_ + 1).value) // None
None

scala>   println(fut.map(_ + 1).value) // None
Some(Success(43))

scala>   println(fut.map(_ + 1).value) // None
Some(Success(43))

scala>   println(fut.map(_ + 1).value) // None
None

编辑
显示代码的不确定性结果(不对其进行任何更改):

scala> Demo.main(Array())
List()
None
Some(Success(43))

scala> Demo.main(Array())
List()
None
None

scala> Demo.main(Array())
List()
None
None

scala> Demo.main(Array())
Success(43)
Some(Success(43))
Some(Success(43))

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

控制器变量的AngularJS范围取决于它是否附加到范围或此范围

来自分类Dev

追加到列表中,取决于值是否已存在

来自分类Dev

使变量取决于目标

来自分类Dev

C ++模板数组类:错误生成取决于它是否继承接口

来自分类Dev

父母的风格取决于孩子的动态价值

来自分类Dev

显示文本取决于是否支持全屏以及是否已处于全屏模式

来自分类Dev

Randrange取决于变量-Python

来自分类Dev

背景颜色取决于变量

来自分类Dev

Ruby-是否有办法获取特定未来时间的时间戳,但该时间戳取决于时区

来自分类Dev

如何为网站中的JS变量分配值,具体取决于它是在本地运行还是在生产中运行?

来自分类Dev

Magento中的条件布局块取决于是否已登录?

来自分类Dev

Magento中的条件布局块取决于是否已登录?

来自分类Dev

有条件的JavaScript公式,取决于是否已选中复选框

来自分类Dev

取消绑定取决于对象类型

来自分类Dev

取消绑定取决于对象类型

来自分类Dev

C ++-方法的实现取决于是否设置了成员引用变量

来自分类Dev

Java应用程序的性能是否取决于将变量传递给方法?

来自分类Dev

Angular2修饰代码是否不能复制到js取决于类的顺序?

来自分类Dev

C ++使变量类型取决于用户输入

来自分类Dev

Sass变量取决于媒体查询

来自分类Dev

Where子句取决于变量的值

来自分类Dev

CircleCI:env变量,取决于分支

来自分类Dev

分位数取决于其他变量

来自分类Dev

Ansible创建变量,取决于条件

来自分类Dev

使textblock的文本取决于其变量

来自分类Dev

使视图取决于laravel中的变量

来自分类Dev

MySQL从表中选择取决于变量

来自分类Dev

FROM子句取决于变量值

来自分类Dev

分位数取决于其他变量

Related 相关文章

  1. 1

    控制器变量的AngularJS范围取决于它是否附加到范围或此范围

  2. 2

    追加到列表中,取决于值是否已存在

  3. 3

    使变量取决于目标

  4. 4

    C ++模板数组类:错误生成取决于它是否继承接口

  5. 5

    父母的风格取决于孩子的动态价值

  6. 6

    显示文本取决于是否支持全屏以及是否已处于全屏模式

  7. 7

    Randrange取决于变量-Python

  8. 8

    背景颜色取决于变量

  9. 9

    Ruby-是否有办法获取特定未来时间的时间戳,但该时间戳取决于时区

  10. 10

    如何为网站中的JS变量分配值,具体取决于它是在本地运行还是在生产中运行?

  11. 11

    Magento中的条件布局块取决于是否已登录?

  12. 12

    Magento中的条件布局块取决于是否已登录?

  13. 13

    有条件的JavaScript公式,取决于是否已选中复选框

  14. 14

    取消绑定取决于对象类型

  15. 15

    取消绑定取决于对象类型

  16. 16

    C ++-方法的实现取决于是否设置了成员引用变量

  17. 17

    Java应用程序的性能是否取决于将变量传递给方法?

  18. 18

    Angular2修饰代码是否不能复制到js取决于类的顺序?

  19. 19

    C ++使变量类型取决于用户输入

  20. 20

    Sass变量取决于媒体查询

  21. 21

    Where子句取决于变量的值

  22. 22

    CircleCI:env变量,取决于分支

  23. 23

    分位数取决于其他变量

  24. 24

    Ansible创建变量,取决于条件

  25. 25

    使textblock的文本取决于其变量

  26. 26

    使视图取决于laravel中的变量

  27. 27

    MySQL从表中选择取决于变量

  28. 28

    FROM子句取决于变量值

  29. 29

    分位数取决于其他变量

热门标签

归档