For-Comprehensions
Guarded For
Keep only elements that pass a condition.
for-guard
An `if` clause inside a `for` filters elements before they are yielded, the same result as `filter` followed by `map`.
Guarded For
ForGuard.scala
Replay: real traced execution (multi-file project)
object Main {
def main(args: Array[String]): Unit = {
val limit = 2
val kept = for (n <- List(1, 2, 3, 4) if n > limit) yield n
val text = kept.mkString(",")
println("count=" + kept.length)
println("text=" + text)
}
}
object Main {
def main(args: Array[String]): Unit = {
val limit = 1
val kept = for (n <- List(1, 2, 3, 4) if n > limit) yield n
val text = kept.mkString(",")
println("count=" + kept.length)
println("text=" + text)
}
}
object Main {
def main(args: Array[String]): Unit = {
val limit = 3
val kept = for (n <- List(1, 2, 3, 4) if n > limit) yield n
val text = kept.mkString(",")
println("count=" + kept.length)
println("text=" + text)
}
}
limit ← 2, kept ← List(3, 4), text ← 3,4
1object Main {2 def main(args: Array[String]): Unit = {3 val limit→ 2 = 2 //@limit=1, 34 val kept→ List(3, 4) = for (n <- List(1, 2, 3, 4) if n > limit2) yield n5 val text→ 3,4 = keptList(3, 4).mkString(",")67 println("count=" + kept.length2)8 println("text=" + text3,4)9 }10}outputcount=2 text=3,4
limit ← 1, kept ← List(2, 3, 4), text ← 2,3,4
1object Main {2 def main(args: Array[String]): Unit = {3 val limit→ 1 = 14 val kept→ List(2, 3, 4) = for (n <- List(1, 2, 3, 4) if n > limit1) yield n5 val text→ 2,3,4 = keptList(2, 3, 4).mkString(",")67 println("count=" + kept.length3)8 println("text=" + text2,3,4)9 }10}outputcount=3 text=2,3,4
limit ← 3, kept ← List(4), text ← 4
1object Main {2 def main(args: Array[String]): Unit = {3 val limit→ 3 = 34 val kept→ List(4) = for (n <- List(1, 2, 3, 4) if n > limit3) yield n5 val text→ 4 = keptList(4).mkString(",")67 println("count=" + kept.length1)8 println("text=" + text4)9 }10}outputcount=1 text=4