是否可以在Scala中为for comprehension定义一个值(在if中)以用于yield。
我想这样做是为了避免两次潜在的昂贵评估。
举例说明。
for {
bar <- bars if expensive(bar) > 5
} yield (bar, expensive(bar))
答案 0 :(得分:7)
这个怎么样:
for {
bar <- bars
exp = expensive(bar)
if exp > 5
} yield (bar, exp)
答案 1 :(得分:4)
是的,你可以:
scala> List(1,2,3,4,5)
res0: List[Int] = List(1, 2, 3, 4, 5)
scala> for(n <- res0; val b = n % 2; if b==1) yield b
res2: List[Int] = List(1, 1, 1)