AFAIK,Iterator.map
是懶惰的,而Vector.map
渴望,基本上是因爲它們是不同類型的單子。可以嘗試懶惰或渴望在斯卡拉?
我想知道,如果有一種具有EagerTry
和LazyTry
,其行爲就像the current Try
的任何機會,但後者(LazyTry
)延遲傳遞,直到結果關閉的執行需要(如果需要的話)。
請注意,聲明爲lazy
的東西在Scala中效果不佳,特別是它適用於給定範圍。傳遞參數時(參數按名稱)存在替代方法。問題是如何在將(懶惰)值返回到外部作用域時實現惰性行爲。 Option
基本上是長度爲0或1的集合,對於懶惰集合(Iterator
,Sequence
),但限於長度爲0或1(如Option
和Either
),這將是等效情況。我對Try
特別感興趣,即,使用LazyTry
就像使用Try
一樣。我想這應該是在其他情況下類似(Option
和Either
)。
請注意,我們已經有EagerTry
,因爲目前的標準Try
渴望。不幸的是,該類是封閉的,因此,我們需要定義其中的三個類並實現其中的兩個(而不是定義和實現一個),從而擁有同一類的急切和懶惰的版本。重點是返回一個Try
而沒有其他軟件層擔心該代碼的執行時間,即抽象。
謝謝。這涵蓋了'Try'的大部分方法和功能,但是不能使用模式匹配,這是一個很大的失望。對於這樣的用途,我更喜歡[this](http://pastebin.com/g7Bys3gU)。在這種情況下,我們需要在做任何事情之前得到實際的價值,但它封裝懶惰就好,唯一的問題是:它使用它不透明。我甚至進一步[嘗試定義匹配方法](http://pastebin.com/9CkszZGf),但這種方法效果不佳,而且我的想法已經過時。 – Trylks 2015-02-25 13:56:46
你可以用'def toTry = underlying'和模式匹配將它轉換爲'Try'。 – 2015-02-25 22:57:42
或者用'unapply'方法添加'LazySuccess'和'LazyFailure'對象,這些方法在'underlying'上匹配。 – 2015-02-25 23:03:17