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