Chapter 7. for Comprehensions in Depth
for comprehensions in “Scala for Comprehensions”. At this point, they look like a nice, more flexible version of the venerable
for loop, but not much more. In fact, lots of sophistication lies below the surface, sophistication that has useful benefits for writing concise code with elegant solutions to a number of design problems.
In this chapter, we’ll dive below the surface to really understand
for comprehensions. We’ll see how they are implemented in Scala and how your own container types can exploit them.
We’ll finish with an examination of how many Scala container types use
for comprehensions to address several common design problems, such as error handling during the execution of a sequence of processing steps. As a final step, we’ll extract a well-known functional technique for a recurring idiom.
Recap: The Elements of for Comprehensions
for comprehensions contain one or more generator expressions, plus optional guard expressions (for filtering), and value definitions. The output can be “yielded” to create new collections or a side-effecting block of code can be executed on each pass, such as printing output. The following example demonstrates all these features. It removes blank lines from a text file:
Remove blank lines from the specified input file.