Chapter 6 - Block return values

Exercise 2: IRB session

Here’s the output you’ll see when you type those expressions into irb. We’ve also added some notes about what the results mean.

$ irb
2.2.2 :001 > numbers = [1, 2, 3, 4, 5]
 => [1, 2, 3, 4, 5]

Here we assign an array of numbers to a variable.

2.2.2 :002 > numbers.find { |number| number > 2 }
 => 3

The find method is just like find_all, except that it returns only the first array element for which the block returns true. The first element that’s greater than 2 is, of course, 3.

2.2.2 :003 > numbers.find_all { |number| number > 2 }
 => [3, 4, 5]

And as we saw before, find_all returns an array of all the elements for which the block returns true. 3, 4, and 5 are all greater than 2.

2.2.2 :004 > numbers.reject { |number| number > 2 }
 => [1, 2]

The reject method is the opposite of find_all; it returns an array of all elements for which the block returns false (rejecting the elements for which it returns true). 3, 4, and 5 are greater than 2, and so they were rejected.

2.2.2 :005 > numbers.partition { |number| number > 2 }
 => [[3, 4, 5], [1, 2]]

The partition method returns two arrays, one with all the values for which the block returned true, and a second with the values for which the block returned false.

2.2.2 :006 > strings = ["Ruby", "is", "so", "cool"]
 => ["Ruby", "is", "so", "cool"]

Here we create an array of string values.

2.2.2 :007 > strings.find { |string| string.length > 2 }
 => "Ruby"

This finds the first string with a length greater than two characters.

2.2.2 :008 > strings.find_all { |string| string.length > 2 }
 => ["Ruby", "cool"]

This finds all strings with a length greater than two characters.

2.2.2 :009 > strings.reject { |string| string.length > 2 }
 => ["is", "so"]

This rejects any string with a length greater than two characters.

2.2.2 :010 > strings.partition { |string| string.length > 2 }
=> [["Ruby", "cool"], ["is", "so"]]

This partitions the array into two arrays: one with all the strings longer than two characters, and a second array with strings that are not.

2.2.2 :011 > exit
$

As always, typing exit by itself exits irb, and returns us to the system prompt.