我刚开始用来处理monadic操作。 的选项类型,托尼·莫里斯的这种小抄帮助: http://blog.tmorris.net/posts/scalaoption-cheat-sheet/单向操作
那么到底它似乎很容易理解:
- 地图转换选项
- 压扁许可证内的值在
Option[X]
- flatMap转化
Option[Option[X]]
是某种产生Option[Option[X]]
地图操作,然后变平以Option[X]
至少这是我的理解,直到现在。
对于任何一个,似乎有点困难,以理解,因为要么本身是不对的biaised,没有地图/ flatMap操作......我们使用投影。
我可以阅读Scaladoc,但它不像选项上的备忘单那样清晰。 有人可以提供一张Either Sheet Cheat来描述基本的monadic操作吗?
在我看来,Either.joinRight
有点像RightProjection.flatMap
,似乎相当于Option.flatten
为任一。
在我看来,如果Either
是正确的偏向,那么Either.flatten将是Either.joinRight不?
在这个问题:Either, Options and for comprehensions我问Eiher的理解,其中一个答案说,我们不能混合monad,因为它被desugared到地图/ flatMap /过滤器的方式。
当使用这种代码:
def updateUserStats(user: User): Either[Error,User] = for {
stampleCount <- stampleRepository.getStampleCount(user).right
userUpdated <- Right(copyUserWithStats(user,stampleCount)).right
userSaved <- userService.update(userUpdated).right
} yield userSaved
这是否意味着所有我的3个方法调用必须总是返回Either[Error,Something]
? 我的意思是如果我有一个方法调用Either[Throwable,Something]
它不会正常工作?
编辑: 就是尽量[某件事]完全一样的权利,无论是biaised [Throwable的,东西]?
如果你想要一个右倾的'Either',我会建议使用'scalaz。\ /'代替。 – 2013-04-24 14:16:57
没错。但是我不是'\ /'语法的粉丝。看来我也可以使用这个技巧来拉皮或者类型:https://issues.scala-lang.org/browse/SI-5793?focusedCommentId=57583&page=com.atlassian.jira.plugin.system.issuetabpanels%3acomment- tabpanel#comment-57583 – 2013-04-24 14:30:42
您也可以简单地使用'Try',它是scala 2.10库的一部分,并且是正确的。虽然它不是一般的,因为它也将左类型修正为“Throwable”,但这大概是你大多数时候想要的。 – 2013-04-24 14:33:23