我刚开始习惯于处理一元操作。对于 Option 类型,Tony Morris 的这份备忘单有所帮助: http ://blog.tmorris.net/posts/scalaoption-cheat-sheet/
所以最后似乎很容易理解:
- map 转换选项内部的值
Option[Option[X]]
展平许可证以进行改造Option[X]
- flatMap 在某种程度上是一个地图操作,产生一个
Option[Option[X]]
然后展平为Option[X]
至少到目前为止我是这么理解的。
对于 Either,它似乎有点难以理解,因为 Either 本身没有正确的偏见,没有 map / flatMap 操作......而且我们使用投影。
我可以阅读 Scaladoc,但它不如选项备忘单那么清晰。有人可以提供一个 Either Sheet Cheat 来描述基本的一元操作吗?
在我看来,这Either.joinRight
有点像RightProjection.flatMap
并且似乎相当于Option.flatten
for Either。
在我看来,如果Either
是右偏,那么 Either.flatten 将是 Either.joinRight 不?
在这个问题中:我询问关于 Eiher 理解的选项和理解,其中一个答案说我们不能混合 monad,因为它被脱糖到 map/flatMap/filter 中的方式。
使用这种代码时:
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]
,它就不能正常工作?
编辑: Try[Something] 与右偏的 Either[Throwable,Something] 完全相同吗?