2014-02-09 29 views
20

scalaz.Validation據說比單元的Try更強大,因爲它可以累積錯誤。在Scala中處理monads時出錯?嘗試與驗證

是否有任何場合可以選擇Try高於scalaz.Validationscalaz.\/

+0

「Validation」中沒有'flatMap','\ /'不是語義上正確的工具。但這只是我的看法,不是對你的問題的回答。 – senia

+0

'\ /'有什麼問題? –

+0

@TravisBrown:[symmetry](https://groups.google.com/d/msg/scalaz/Wnkdyhebo2w/3Prv5yslDCsJ)。 'left'和'right'應該沒有區別。我無法向同事解釋爲什麼'\ /'工作的方式,「沒有邏輯,只記得它」不是一個解釋。 – senia

回答

33

贊成Try最顯著的說法是,它在標準庫。這也是使用標準庫,例如你FutureonComplete註冊回調必須是功能從Try。它可能在未來的標準庫中被更廣泛地使用。

,它的標準庫,這也意味着它會很熟悉更多的人。您可能傾向於在更多使用的第三方庫中找到它。當然,有時候您可能不會被允許使用Scalaz(或任何其他依賴項),也可能因爲其他完美的原因而想要避免Scalaz。

其他的東西:我不記得上一次我寫了\/,它的左側沒有Throwable(我有 - 這不是我經常做的事)。 Try烘烤這個,所以你不必擔心寫一個別名或任何其他。

由於senia註釋在上面的評論中,可以說有點不直觀的偏差類似類型,但仍然使用「左」和「右」的語言(如\/是,並且確實如此)。爲什麼\/通過右側進行綁定?因爲它的確如此,這就是爲什麼。我個人並沒有發現反對的命名,但我能理解爲什麼有些人可能會這樣做。 Try通過具有明確指示其語義的構造函數名來避免該問題:SuccessFailure,而不是LeftRight-\/\/-。現在

,我們正在向完全膚淺的和主觀的原因,使用Try,有些人可能只是覺得\/-\/\/-是醜陋的。我通常不介意操作繁重的代碼,並且我發現打字和閱讀的混亂和破折號混雜讓人很不愉快。

因此,這些都是一些論點支持Try,根據要求,但我會說,我從來沒有使用它,自己得出結論。我並不特別在意那麼多的事實,它violates the monad laws(雖然我能理解人們爲什麼做),但我確實發現\/Validation更特設,更容易推理,和我一樣有機會獲得這兩個(Validationwhen I want to accumulate errors,\/when I need monadic sequencing)。

+0

「左」和「右」有什麼問題?對==正確。這是一個雙關,這是一個令人困惑的事情?斯卡拉斯在刪除雙關時混淆了這個問題,這就是問題所在。 – user239558

+3

好吧,這讓我感到困惑......'Try'是捕獲異常並將它們轉化爲值的東西,一個專門的'Either [Exception,T]'。 「驗證」似乎不以任何方式處理異常,因此,對我而言,它們看起來相互正交。 –

+0

拉丁語形容詞sinister/sinistra/sinistrum原本意思是「左」,但在古典拉丁時代意味着「邪惡」或「不吉利」,這種雙重意義在拉丁語的歐洲衍生物中存在,在英語單詞「sinister 」。 https://en.wikipedia.org/wiki/Bias_against_left-handed_people https://en.wikipedia.org/wiki/Dexter_and_sinister – rapt

相關問題