The block means the default values are only used if the key doesn't already exist. In your example any color or message_format setting passed by the caller would be overridden with the default values.

In the block `value` and `default` are values from the two respective hashes. However if a key is missing in one array, it uses the value from the other, so in essence `{ |key, value1, value2| value1 }` prefers values from the first hash, while `{ |key, value1, value2| value2 }` is the default behaviour of preferring values from the second hash.

Without the block I believe it would need to be something like:

```ruby
defaults = {
  :color => "yellow",
  :message_format => "text"
}
options = default.merge(options)
```