Class: Object
- Inherits:
- BasicObject
- Defined in:
- lib/range_extd/object.rb
Overview
class Object
Overwrite #<=>() so all its sub-classes can be aware of RangeExtd::Infinity objects (the two constants).
To activate these features, explicitly do either of the following
require "range_extd/object"
require "range_extd/load_all"
Instance Method Summary collapse
-
#<=>(c) ⇒ Object
Overwrite #<=>().
-
#compare_obj_before_infinity ⇒ Object
Backup of the original method #<=>.
Instance Method Details
#<=>(c) ⇒ Object
Overwrite #<=>(). Then, all its sub-classes can be aware of RangeExtd::Infinity objects (the two constants).
In this definition of #<=>, if self is Comparable (by judging whether it has the method [#<=]), it always returns, unless infinity? and positive? are set accordingly, either -1 or 1, depending which of
RangeExtd::Infinity::(NEGATIVE|POSITIVE)
is compared. If self is not Comparable, the original [#<=>] is called, which should return nil (unless both the object_id agree, eg., nil and nil, in which case 0 is returned).
If you define your own class, which is Comparable, you should define the method “<=>” as follows, as in the standard practice when you redefine a method that exists in a superclass;
46 47 48 49 |
# File 'lib/range_extd/object.rb', line 46 def <=>(c) return (-(c.send(__method__, self) || return)) if RangeExtd::Infinity.infinity? c # Second "return" is essential as c.send() may return nil. compare_obj_before_infinity(c) end |