Programming Ruby: The Pragmatic Programmer's Guide

# Programming Ruby ### The Pragmatic Programmer's Guide
Previous < | Contents ^ | Next >

module Comparable |
Relies on: | <=>

### Index:

Comparisons between?

The `Comparable` mixin is used by classes whose objects may be ordered. The class must define the `<=>` operator, which compares the receiver against another object, returning -1, 0, or +1 depending on whether the receiver is less than, equal to, or greater than the other object. `Comparable` uses `<=>` to implement the conventional comparison operators (`<`, `<=`, `==`, `>=`, and `>`) and the method `between?`.

`class SizeMatters`
`include Comparable`
`attr :str`
`def <=>(anOther)`
`str.size <=> anOther.str.size`
`end`
`def initialize(str)`
`@str = str`
`end`
`def inspect`
`@str`
`end`
`end`
``
`s1 = SizeMatters.new("Z")`
`s2 = SizeMatters.new("YY")`
`s3 = SizeMatters.new("XXX")`
`s4 = SizeMatters.new("WWWW")`
`s5 = SizeMatters.new("VVVVV")`
``
`s1 < s2` | » | `true`
`s4.between?(s1, s3)` | » | `false`
`s4.between?(s3, s5)` | » | `true`
`[ s3, s2, s5, s4, s1 ].sort` | » | `[Z, YY, XXX, WWWW, VVVVV]`

instance methods
Comparisons | anObject < otherObject -> `true` or `false` anObject <= otherObject -> `true` or `false` anObject == otherObject -> `true` or `false` anObject >= otherObject -> `true` or `false` anObject > otherObject -> `true` or `false`
|  | Compares two objects based on the receiver's `<=>` method.
between? | anObject.between?( min, max ) -> `true` or `false`
|  | Returns `false` if anObject `<=>` min is less than zero or if anObject `<=>` max is greater than zero, `true` otherwise.
`3.between?(1, 5)` | » | `true`
`6.between?(1, 5)` | » | `false`
`'cat'.between?('ant', 'dog')` | » | `true`
`'gnu'.between?('ant', 'dog')` | » | `false`

Previous < | Contents ^ | Next >

Extracted from the book "Programming Ruby - The Pragmatic Programmer's Guide"
Copyright © 2000 Addison Wesley Longman, Inc. Released under the terms of the Open Publication License V1.0.
This reference is available for download.