如何在Scala中使用for而不是flatMap / map?
发布时间:2020-12-16 10:05:30 所属栏目:安全 来源:网络整理
导读:我正在堆栈中了解 Scala是如何工作的. 我认为下面的代码可以用来写,虽然我不知道怎么做. 有人可以解释我怎么做到这一点? def foo: Future[Option[Int]] = ???def bar: Future[Throwable Xor Option[Int]] = ???def baz: Future[Option[Boolean]] = ???foo.f
我正在堆栈中了解
Scala是如何工作的.
我认为下面的代码可以用来写,虽然我不知道怎么做. 有人可以解释我怎么做到这一点? def foo: Future[Option[Int]] = ??? def bar: Future[Throwable Xor Option[Int]] = ??? def baz: Future[Option[Boolean]] = ??? foo.flatMap { case Some(x) => Future.successful(x) case None => bar.flatMap { case Xor.Right(Some(x)) => baz.map { case true => 1 case false => 0 } case Xor.Right(None) => Future.successful(0) case Xor.Left(_) => Future.successful(-1) } } 解决方法
在for-comprehensions中无法模式匹配.见
Allow pattern matching on type in for comprehensions.
也许你可以使用Monad Transformers.我确实想以这种方式实现你的代码,但我现在没有时间.也许提示可以帮助你. /编辑这不完全正确,正如谢尔盖的评论所指出的那样.只要所有匹配类型相同,您就可以在for-comprehension中进行模式匹配.查看从second lesson of the first week of Functional Program Design in Scala Coursera Course获取的图像,其中所有模式都继承自JSON: (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |