假设我有一堆懒惰的价值观:
lazy val v1: T = ... lazy val v2: T = ... lazy val v3: T = ...
T ,检查它是否满足某个标准
T
def f(value: T): Boolean = { /* something here */ }
我试过这个:
Iterable(v1, v2, v3).find(f)
但显然这会引发所有的价值观 v1 v2 , v3 有什么替代方案吗?
v1
v2
v3
这是因为当你通过 lazy val 对于构造函数来说,它们是严格评估的,除非构造函数本身是 按名称传递
lazy val
例如 cons 符号 Stream List )允许您实现您想要的:
cons
Stream
List
lazy val v1 = { print("v1 "); 1 } lazy val v2 = { print("v2 "); 2 } lazy val v3 = { print("v3 "); 3 } (v1 #:: v2 #:: v3 #:: Stream.empty). find(_ == 2). foreach(println) // prints "v1 v2 2"
Here