我已经发布了很多关于Scala故障处理的问题,我非常感谢大家的回答。返回类型为Option时处理故障快速故障[错误]
我明白我的选项可以用和Scalaz或理解力打交道时,我有另一个(持续多久?)问题:
怎么办时,操作处理的操作的快速失败序列在非功能性世界之外,像数据库一样?
我的意思是我有一个这样的方法:
def insertItem(item: Item): Either[Error,Item]
由于无论是和这些答案,我知道如何与要么做到这一点:Chaining method calls with Either和 Method parameters validation in Scala, with for comprehension and monads
但我Item
case类是不可变的,因为调用者已经具有该值,所以将它作为Right
返回并没有什么意义。
因此我该怎么办的事情相同的一种:
def insertItem(item: Item): Option[Error]
在我的应用程序,创建一个用户的时候,我们也创造了一些物品给他。 如果一个项目无法创建,那么整个过程应该停止。
当我直接使用Option[Error]
来理解,我不认为我会得到我期望的结果。
我想这是有道理的做这样的事情:
for {
_ <- insertItem(item1).toLeft("???").right
_ <- insertItem(item2).toLeft("???").right
_ <- insertItem(item3).toLeft("???").right
}
但随着价值观“???”我把我的权利没有用处,我想我错过了优雅的解决方案,不涉及创建永远不会使用的权利。
我觉得我在寻找的东西只有在结果为None
时才会被理解,这有点奇怪,因为我只是想继续下一个操作,而不是做一个真正的map
操作。如果可能的话,我希望非Scalaz和Scalaz解决方案。 我不确定Scalaz如何处理这些事情,因为它似乎更专注于真正的函数式编程,也许不会像我的用例那样为副作用行为提供代码?
看起来不错,谢谢没有一个合适的单位 –