2014-08-31 49 views
4

斯卡拉collectionmap文件說,這對map功能:爲什麼scala Collection.map與Try.map不一致?

通過應用功能這個 列表的所有元素構建一個新的集合。

因此它在上運行,每項目在集合中。

但嘗試它說:

地圖給定函數的值從這個成功或返回該 如果這是一個失敗。

所以它運行success,我能夠理解什麼對failure運行,我仍然可以只打印。爲什麼它與收藏地圖界面不一致?我是否需要查看map在我使用的每個數據結構上所做的工作,並可能發現其行爲有所不同?

回答

7

map在任何單子結構上總是運行在「成功案例」上,即您感興趣的數據在哪裏。

List「成功的情況下」是通過其元素由Success情況下,由Some情況下表示的,上Try,在Future同樣的事情,在Option

List也比其他人有點不同,因爲它並沒有真正有一個「失敗案例」,像TryFutureOption做(儘管你可以考慮Nil列表本身)

一般而言你可以這樣認爲:無論什麼時候,你對某個容器上的數據應用了一個轉換,在其「成功案例」上

+3

用Eric Meijer的話來說「Monads指導你通過快樂的道路」 :)。 – grotrianster 2014-08-31 17:23:51

+1

事實上,這是一個收集與單一數據類型的問題,例如選項,嘗試,單點預測,或者(其中一方仍被認爲是scala中的成功)等等。http://en.wikipedia.org/wiki/Monad_ (functional_programming) – JasonG 2014-08-31 17:29:19

+1

'recover'「就像是異常映射。」http://www.scala-lang.org/api/current/index.html#[email protected][U%3E:T] (f:PartialFunction [Throwable,U]):scala.util.Try [U] – 2014-08-31 18:56:59