Scala是否有一个懒惰的评估包装器?

迪卢姆·拉纳通加(Dilum Ranatunga)

我只想为结果返回一个包装器/持有者,并且只在结果被实际使用时才计算一次。就像是:

def getAnswer(question: Question): Lazy[Answer] = ???

println(getAnswer(q).value)

这应该很容易实现lazy val

class Lazy[T](f: () => T) {
  private lazy val _result = Try(f())

  def value: T = _result.get
}

但是我想知道标准API是否已经包含了类似的东西。

快速搜索指向StreamsDelayedLazyVal但并不是我要找的东西。

流确实会记住流元素,但似乎第一个元素是在构造时计算的:

def compute(): Int = { println("computing"); 1 }

val s1 = compute() #:: Stream.empty
// computing is printed here, before doing s1.take(1)

同样,DelayedLazyVal从构造开始计算,甚至需要执行上下文:

val dlv = new DelayedLazyVal(() => 1, { println("started") })
// immediately prints out "started"

还有scalaz.Need,我认为你可以使用这个。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何一次评估一个懒惰列表?

是否有可能围绕&mut创建一个类似于&mut的包装器

是否有可能建立一个懒惰的条件元功能

JBake Freemarker 错误“这已评估为一个序列(包装器:ftSimpleSequence”

是否有可能 2 个线程同时锁定一个互斥锁(使用互斥锁包装器)?

是否有一个用于golang的jq包装器,可以产生人类可读的JSON输出?

是否有一个硒包装器来查找具有给定选择器类型的元素作为输入(By.css_selector,By.xpath,By.class ...)?

LINQ中是否有一个愚蠢的“全部”评估所有元素?

是否有一个`jq`命令行工具或包装器,可让您像`jmespath.terminal`一样交互式地浏览`jq`。

是否有一个 C++ 智能指针可以包装一个对象以使其线程安全?

通过Membership.CreateUser创建用户时,是否有一个.NET包装器可以设置用户的地址,城市,州,邮政编码等?

角2:是否有一个事件聚合器?

是否有一个“先前的兄弟”选择器?

urlopen 是否懒惰地评估?

是否有一个Bash包装器(程序/脚本),当我希望在一个Bash调用中有多个输出时,它可以使输入更简洁

为所有对Rails中的Web服务的调用创建一个包装控制器

使一个懒惰的 p:dataTable 响应

如何产生一个懒惰的分裂?

如何折叠Scala的迭代器,并得到一个懒洋洋地评估序列结果呢?

是否有一个函数可以“评估”字符串中的一系列数字?

在 Typescript 中创建一个 fetch 包装器

如何构造一个演员及其包装器?

创建一个JavaFX场景包装器

在一个主要包装器中组合几个 div

创建一个可重用的Redux包装器

为 React 组件创建一个纯包装器

pdo 包装器最后一个 id 返回 0

Nim:如何从另一个迭代器包装/派生一个迭代器?

朱莉娅有一个懒惰的“过滤器”吗?