我已經發布了很多關於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如何處理這些事情,因爲它似乎更專注於真正的函數式編程,也許不會像我的用例那樣爲副作用行爲提供代碼?
看起來不錯,謝謝沒有一個合適的單位 –