scalaz.Validation
據說比單元的Try
更強大,因爲它可以累積錯誤。在Scala中處理monads時出錯?嘗試與驗證
是否有任何場合可以選擇Try
高於scalaz.Validation
或scalaz.\/
?
scalaz.Validation
據說比單元的Try
更強大,因爲它可以累積錯誤。在Scala中處理monads時出錯?嘗試與驗證
是否有任何場合可以選擇Try
高於scalaz.Validation
或scalaz.\/
?
贊成Try
最顯著的說法是,它在標準庫。這也是使用標準庫,例如你Future
的onComplete
註冊回調必須是功能從Try
。它可能在未來的標準庫中被更廣泛地使用。
,它的標準庫,這也意味着它會很熟悉更多的人。您可能傾向於在更多使用的第三方庫中找到它。當然,有時候您可能不會被允許使用Scalaz(或任何其他依賴項),也可能因爲其他完美的原因而想要避免Scalaz。
其他的東西:我不記得上一次我寫了\/
,它的左側沒有Throwable
(我有 - 這不是我經常做的事)。 Try
烘烤這個,所以你不必擔心寫一個別名或任何其他。
由於senia註釋在上面的評論中,可以說有點不直觀的偏差類似類型,但仍然使用「左」和「右」的語言(如\/
是,並且確實如此)。爲什麼\/
通過右側進行綁定?因爲它的確如此,這就是爲什麼。我個人並沒有發現反對的命名,但我能理解爲什麼有些人可能會這樣做。 Try
通過具有明確指示其語義的構造函數名來避免該問題:Success
和Failure
,而不是Left
和Right
或-\/
和\/-
。現在
,我們正在向完全膚淺的和主觀的原因,使用Try
,有些人可能只是覺得\/
和-\/
和\/-
是醜陋的。我通常不介意操作繁重的代碼,並且我發現打字和閱讀的混亂和破折號混雜讓人很不愉快。
因此,這些都是一些論點支持Try
,根據要求,但我會說,我從來沒有使用它,自己得出結論。我並不特別在意那麼多的事實,它violates the monad laws(雖然我能理解人們爲什麼做),但我確實發現\/
和Validation
更特設,更容易推理,和我一樣有機會獲得這兩個(Validation
when I want to accumulate errors,\/
when I need monadic sequencing)。
「左」和「右」有什麼問題?對==正確。這是一個雙關,這是一個令人困惑的事情?斯卡拉斯在刪除雙關時混淆了這個問題,這就是問題所在。 – user239558
好吧,這讓我感到困惑......'Try'是捕獲異常並將它們轉化爲值的東西,一個專門的'Either [Exception,T]'。 「驗證」似乎不以任何方式處理異常,因此,對我而言,它們看起來相互正交。 –
拉丁語形容詞sinister/sinistra/sinistrum原本意思是「左」,但在古典拉丁時代意味着「邪惡」或「不吉利」,這種雙重意義在拉丁語的歐洲衍生物中存在,在英語單詞「sinister 」。 https://en.wikipedia.org/wiki/Bias_against_left-handed_people https://en.wikipedia.org/wiki/Dexter_and_sinister – rapt
「Validation」中沒有'flatMap','\ /'不是語義上正確的工具。但這只是我的看法,不是對你的問題的回答。 – senia
'\ /'有什麼問題? –
@TravisBrown:[symmetry](https://groups.google.com/d/msg/scalaz/Wnkdyhebo2w/3Prv5yslDCsJ)。 'left'和'right'應該沒有區別。我無法向同事解釋爲什麼'\ /'工作的方式,「沒有邏輯,只記得它」不是一個解釋。 – senia