为什么 `Future#toString` returns `"List()"`?
Why does `Future#toString` returns `"List()"`?
在未等待完成的情况下调用 .toString
会导致不确定的结果。我的问题是 为什么 在 scala 2.10.x 和 2.[=44= 中对未完成的期货 returns "List()"
调用 .toString
]? The implementation 似乎没有明确说明这一点。
可以从 REPL 中观察到此行为:
scala> import scala.concurrent.Future, scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global
scala> Future(1).toString
res0: scala.concurrent.Future[Int] = Success(1)
scala> Future(1).toString
res1: scala.concurrent.Future[Int] = List()
请注意,Scala 2.12.x 可能会将 Future#toString
显式实现为 return "Future(<not completed>)"
而不是 (source).
编辑:证明这不是来自 REPL 或 "some hidden implicit" 的人工制品(-Yno-predef
删除所有默认隐式):
Future.scala:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
object Main extends App {
System.out.println(Future(1).toString)
}
build.sbt:
scalaVersion := "2.11.8"
scalacOptions := Seq(
"-deprecation",
"-encoding", "UTF-8",
"-feature",
"-unchecked",
"-Yno-predef",
"-Xfatal-warnings",
"-Xlint",
"-Yinline-warnings",
"-Yno-adapted-args",
"-Ywarn-dead-code",
"-Ywarn-unused-import",
"-Ywarn-numeric-widen",
"-Ywarn-value-discard",
"-Xfuture")
移除 sun.misc.Unsafe
的依赖性是一个不幸的副作用。它在 Scala 2.12 和更新版本的 Scala 2.11 IIRC 中得到纠正。
在未等待完成的情况下调用 .toString
会导致不确定的结果。我的问题是 为什么 在 scala 2.10.x 和 2.[=44= 中对未完成的期货 returns "List()"
调用 .toString
]? The implementation 似乎没有明确说明这一点。
可以从 REPL 中观察到此行为:
scala> import scala.concurrent.Future, scala.concurrent.ExecutionContext.Implicits.global
import scala.concurrent.ExecutionContext.Implicits.global
scala> Future(1).toString
res0: scala.concurrent.Future[Int] = Success(1)
scala> Future(1).toString
res1: scala.concurrent.Future[Int] = List()
请注意,Scala 2.12.x 可能会将 Future#toString
显式实现为 return "Future(<not completed>)"
而不是 (source).
编辑:证明这不是来自 REPL 或 "some hidden implicit" 的人工制品(-Yno-predef
删除所有默认隐式):
Future.scala:
import scala.concurrent.Future
import scala.concurrent.ExecutionContext.Implicits.global
object Main extends App {
System.out.println(Future(1).toString)
}
build.sbt:
scalaVersion := "2.11.8"
scalacOptions := Seq(
"-deprecation",
"-encoding", "UTF-8",
"-feature",
"-unchecked",
"-Yno-predef",
"-Xfatal-warnings",
"-Xlint",
"-Yinline-warnings",
"-Yno-adapted-args",
"-Ywarn-dead-code",
"-Ywarn-unused-import",
"-Ywarn-numeric-widen",
"-Ywarn-value-discard",
"-Xfuture")
移除 sun.misc.Unsafe
的依赖性是一个不幸的副作用。它在 Scala 2.12 和更新版本的 Scala 2.11 IIRC 中得到纠正。