Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/entity-framework/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 如何将MapTo正确用于Sum类型_Scala - Fatal编程技术网

Scala 如何将MapTo正确用于Sum类型

Scala 如何将MapTo正确用于Sum类型,scala,Scala,我不知道为什么下面没有打印“它是A” 其结果如下: java.util.NoSuchElementException: None.get at scala.None$.get(Option.scala:347) at scala.None$.get(Option.scala:345) ... 31 elided 我想我可以用mapTo将A转换成Foo,然后对其进行案例分析。这是我正在使用Akka的问题和程序的简化版本。ask(actor,msg)。mapTo[T]是一个从Future[Any]

我不知道为什么下面没有打印“它是A”

其结果如下:

java.util.NoSuchElementException: None.get
at scala.None$.get(Option.scala:347)
at scala.None$.get(Option.scala:345)
... 31 elided
我想我可以用mapTo将
A
转换成
Foo
,然后对其进行案例分析。这是我正在使用Akka的问题和程序的简化版本。

ask(actor,msg)。mapTo[T]
是一个从
Future[Any]
Future[T]
的过程,您似乎正确地使用了它。失败是由于
值。获取
。试着这样把它去掉

object futureMapToExample extends App {
  import scala.concurrent.Future
  import scala.concurrent.ExecutionContext.Implicits.global

  sealed trait Foo
  case object A extends Foo
  case object B extends Foo

  val a = Future.successful(A)

  a.mapTo[Foo].map {
    case A => println("it is an A")
    case B => println("it is a B")
  }

  Thread.sleep(1000)
}
它应该打印出来

it is an A

使用
value.get
失败的原因是
Future
此时尚未完成。请注意我是如何添加
Thread.sleep(1000)
hack的,以便给
未来的
一些时间来完成。这只是为了演示,不应在生产中进行。一般来说,如果可能的话,应该避免调用
get
,因为它们是不安全的。

cool-这很有效。基本上,我有一个Akka程序,它发送回另一个参与者(将来)的消息是一个总和类型,所以我需要从提问中得到响应,映射到封闭特征的类型,然后进行案例分析。这是mapTo的有效用法吗?@Mojo Yes
ask(actor,msg)。mapTo[T]
是一种从
Future[Any]
Future[T]
的安全方式,谢谢你,伙计-我真的不喜欢Akka。在我转到上面的解决方案之前,我设法编译了一个程序,在这个程序中,我发回了Future[String,Unit]类型的消息,然后在接收actor中,我做了一个到case类Foo类型的映射(res:oring[String,Unit]猜猜它是怎么编译的!!我不确定Mpto是如何把它投射到一个FO上的,但是我怀疑它试图调用CASE类上的Apple方法并做CAST。
it is an A