Nameless Functions

A Ruby block may be regarded as a sort of nameless function or method, and its most frequent use is to provide a means of iterating over items from a list or range of values. If you have never come across nameless functions, this may sound like gobbledygook. With luck, by the end of this chapter, things will have become a little clearer. Let’s look back at the simple example given earlier. I said a block is like a nameless function. Take this block as an example:

{ |i|
    puts( i )
}

If that were written as a normal Ruby method, it would look something like this:

def aMethod( i )
   puts( i )
end

To call that method three times and pass values from 0 to 2, you might write this:

for i in 0..2
   aMethod( i )
end

When you create a nameless method (that is, a block), variables declared between upright bars such as |i| can be treated like the arguments to a named method. I will refer to these variables as block parameters.

Look again at my earlier example:

3.times { |i|
    puts( i )
}

The times method of an integer passes values to a block from 0 to the specified integer value minus 1.

So, this:

3.times{ |i| }

is very much like this:

for i in 0..2
    aMethod( i )
end

The chief difference is that the second example has to call a named method to process the value of i, whereas the first example uses the nameless method (the code between curly brackets) to process i.