您可以在Scala中为for comprehension定义一个值(在if中)以用于yield

时间:2012-11-09 19:35:43

标签: scala functional-programming for-comprehension

是否可以在Scala中为for comprehension定义一个值(在if中)以用于yield。

我想这样做是为了避免两次潜在的昂贵评估。

举例说明。

for {
 bar <- bars if expensive(bar) > 5
} yield (bar, expensive(bar))

2 个答案:

答案 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)