假设我有一堆惰性值:
lazy val v1: T = ...
lazy val v2: T = ...
lazy val v3: T = ...
我有一个布尔函数,给出类型T
的结果,检查它是否满足某个标准
def f(value: T): Boolean = { /* something here */ }
我希望以一种懒惰的方式找到满足某个标准的值:就像你在看到它们的时候继续评估它们,并在找到满足条件的第一个时立即停止评估: 我试过这个:
Iterable(v1, v2, v3).find(f)
但显然这会触发所有值v1
,v2
,v3
(虽然我希望它们是懒惰的)。
有没有替代方案?
答案 0 :(得分:5)
这是因为当你将lazy val
传递给构造函数时,它们会被严格评估,除非构造函数本身是按名称传递。
例如,cons
的{{1}}符号(Stream
的懒惰对应词)可以让您达到您想要的效果:
List
Here是关于懒惰和名字参数的有趣读物。